Python自动重试HTTP连接装饰器


Posted in Python onApril 28, 2015

有时候我们要去别的接口取数据,可能因为网络原因偶尔失败,为了能自动重试,写了这么一个装饰器。
这个是python2.7x 的版本,python3.x可以用 nonlocal 来重写。

#-*- coding: utf-8 -*-  
#all decorators in this tool file 
#author: orangleliu 
 
############################################################ 
#http连接有问题时候,自动重连 
def conn_try_again(function): 
  RETRIES = 0 
  #重试的次数 
  count = {"num": RETRIES} 
  def wrapped(*args, **kwargs): 
    try: 
      return function(*args, **kwargs) 
    except Exception, err: 
      if count['num'] < 2: 
        count['num'] += 1 
        return wrapped(*args, **kwargs)          
      else: 
        raise Exception(err) 
  return wrapped

用法很的简单,下面是一个程序片段。

@conn_try_again 
def post_query_bandwidth_for_bandwidth(self, contract_no, data_month, product_code): 
  #根据webluker接口情况获取计费数据   
  try: 
    post_data = {'contract':contract_no, 'month': data_month, 'code':product_code} 
    params = urllib.urlencode(post_data) 
    response = urllib2.urlopen(WEBLUKER_BANDWITH_API + "?" +params) 
    billdata = {} 
    billdata = response.read() 
    if not billdata: 
      billdata = {} 
    return billdata 
  except Exception, err: 
    err = u'与webluker接口间通信异常' 
    raise Exception(err)

如果try块中有异常,就会自动重试2次。

Python 相关文章推荐
python 实时遍历日志文件
Apr 12 Python
Python文件操作,open读写文件,追加文本内容实例
Dec 14 Python
Python自定义函数定义,参数,调用代码解析
Dec 27 Python
python实现12306抢票及自动邮件发送提醒付款功能
Mar 08 Python
python放大图片和画方格实现算法
Mar 30 Python
python 提取tuple类型值中json格式的key值方法
Dec 31 Python
OpenCV搞定腾讯滑块验证码的实现代码
May 18 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
Nov 04 Python
Python特殊属性property原理及使用方法解析
Oct 09 Python
python如何控制进程或者线程的个数
Oct 16 Python
Python3.8官网文档之类的基础语法阅读
Sep 04 Python
Django框架中视图的用法
Jun 10 Python
Python2.6版本中实现字典推导 PEP 274(Dict Comprehensions)
Apr 28 #Python
Python中输出ASCII大文字、艺术字、字符字小技巧
Apr 28 #Python
Python合并多个装饰器小技巧
Apr 28 #Python
查看Python安装路径以及安装包路径小技巧
Apr 28 #Python
Python中获取对象信息的方法
Apr 27 #Python
用实例解释Python中的继承和多态的概念
Apr 27 #Python
Python中设置变量访问权限的方法
Apr 27 #Python
You might like
PHP中实现进程间通讯
2006/10/09 PHP
解析yii数据库的增删查改
2013/06/20 PHP
简单实用的.net DataTable导出Execl
2013/10/28 PHP
PHP判断是否有Get参数的方法
2014/05/05 PHP
图解找出PHP配置文件php.ini的路径的方法
2014/08/20 PHP
Yii框架登录流程分析
2014/12/03 PHP
PHP 实现 WebSocket 协议原理与应用详解
2020/04/22 PHP
javascript十个最常用的自定义函数(中文版)
2009/09/07 Javascript
利用CSS3在Angular中实现动画
2016/01/15 Javascript
javascript中arguments,callee,caller详解
2016/03/16 Javascript
微信小程序登录态控制深入分析
2017/04/12 Javascript
jQuery.form.js的使用详解
2017/06/14 jQuery
js 原生判断内容区域是否滚动到底部的实例代码
2017/11/15 Javascript
Vue.js实现图片的随意拖动方法
2018/03/08 Javascript
JavaScript 中的12种循环遍历方法【总结】
2018/05/31 Javascript
使用rollup打包JS的方法步骤
2018/12/05 Javascript
layui 实现table翻页滚动条位置保持不变的例子
2019/09/05 Javascript
详解vue页面首次加载缓慢原因及解决方案
2019/11/06 Javascript
jQuery实现手风琴效果(蒙版)
2020/01/11 jQuery
Vue v-for中的 input 或 select的值发生改变时触发事件操作
2020/08/31 Javascript
python关闭windows进程的方法
2015/04/18 Python
浅析PEP572: 海象运算符
2019/10/15 Python
Numpy 理解ndarray对象的示例代码
2020/04/03 Python
关于Theano和Tensorflow多GPU使用问题
2020/06/19 Python
西班牙灯具网上商店:Lampara.es
2018/06/05 全球购物
美国鲍勃商店:Bob’s Stores
2018/07/22 全球购物
Dyson戴森波兰官网:Dyson.pl
2019/08/05 全球购物
酒店服务实习自我鉴定
2013/09/22 职场文书
中医药大学市场营销专业自荐信
2013/09/29 职场文书
大一军训感言
2014/01/09 职场文书
《这儿真好》教学反思
2014/02/22 职场文书
群众路线教育实践活动心得体会
2014/03/07 职场文书
离职证明标准格式
2014/09/15 职场文书
公诉意见书范文
2015/06/05 职场文书
事业单位工作人员岗前培训心得体会
2016/01/08 职场文书
数据分析数据库ClickHouse在大数据领域应用实践
2022/04/03 MySQL