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 相关文章推荐
简单解析Django框架中的表单验证
Jul 17 Python
Python requests库用法实例详解
Aug 14 Python
python快排算法详解
Mar 04 Python
Python3.5多进程原理与用法实例分析
Apr 05 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
Jul 22 Python
PyTorch的Optimizer训练工具的实现
Aug 18 Python
django 数据库连接模块解析及简单长连接改造方法
Aug 29 Python
python使用python-pptx删除ppt某页实例
Feb 14 Python
Python中logging日志库实例详解
Feb 19 Python
Python分类测试代码实例汇总
Jul 23 Python
Python 如何定义匿名或内联函数
Aug 01 Python
Python尝试实现蒙特卡罗模拟期权定价
Apr 21 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
如何冲泡挂耳包咖啡?技巧是什么
2021/03/04 冲泡冲煮
新手学习PHP的一些基础知识分享
2011/07/27 PHP
去除php注释和去除空格函数分享
2014/03/13 PHP
ThinkPHP函数详解之M方法和R方法
2015/09/10 PHP
php使用curl详细解析及问题汇总
2016/08/11 PHP
php封装的单文件(图片)上传类完整实例
2016/10/18 PHP
thinkPHP中_initialize方法实例分析
2016/12/05 PHP
Laravel基础_关于view共享数据的示例讲解
2019/10/14 PHP
了解jQuery技巧来提高你的代码
2010/01/08 Javascript
jquery 自定义容器下雨效果可将下雨图标改为其他
2014/04/23 Javascript
用js模拟struts2的多action调用示例
2014/05/19 Javascript
深入学习JavaScript对象
2015/10/13 Javascript
详解JavaScript操作HTML DOM的基本方式
2015/10/21 Javascript
JavaScript轻松创建级联函数的方法示例
2017/02/10 Javascript
js实现带三角符的手风琴效果
2017/03/01 Javascript
jQuery弹出窗口简单实现代码
2017/03/09 Javascript
浅谈JS 数字和字符串之间相互转化的纠纷
2017/10/20 Javascript
[09:23]国际邀请赛采访专栏:iG战队VK,Tongfu战队Cu
2013/08/05 DOTA
python实现比较两段文本不同之处的方法
2015/05/30 Python
Python存取XML的常见方法实例分析
2017/03/21 Python
Python实现翻转数组功能示例
2018/01/12 Python
解决Python requests库编码 socks5代理的问题
2018/05/07 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
利用Tensorflow构建和训练自己的CNN来做简单的验证码识别方式
2020/01/20 Python
Django实现whoosh搜索引擎使用jieba分词
2020/04/08 Python
Python Scrapy多页数据爬取实现过程解析
2020/06/12 Python
推荐值得学习的12款python-web开发框架
2020/08/10 Python
芝加哥牛排公司:Chicago Steak Company
2018/10/31 全球购物
匡威俄罗斯官网:Converse俄罗斯
2020/05/09 全球购物
软件测试企业面试试卷
2016/07/13 面试题
致百米运动员广播稿
2014/01/29 职场文书
学校十一活动方案
2014/02/01 职场文书
保密协议书范本
2014/04/22 职场文书
幼儿园语言教学反思
2016/02/23 职场文书
Java基础——Map集合
2022/04/01 Java/Android
《总之就是很可爱》新作短篇动画《总之就是很可爱~制服~》将于2022年夏天播出
2022/04/07 日漫