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文件及目录操作实例详解
Jun 04 Python
Python实现简单的多任务mysql转xml的方法
Feb 08 Python
Python 中urls.py:URL dispatcher(路由配置文件)详解
Mar 24 Python
Python编程实现的简单神经网络算法示例
Jan 26 Python
Python使用遗传算法解决最大流问题
Jan 29 Python
基于wxPython的GUI实现输入对话框(1)
Feb 27 Python
python调用支付宝支付接口流程
Aug 15 Python
python获取网络图片方法及整理过程详解
Dec 20 Python
解决python DataFrame 打印结果不换行问题
Apr 09 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
May 23 Python
使用tensorflow 实现反向传播求导
May 26 Python
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
Jun 03 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魔术函数__call()用法实例分析
2015/02/13 PHP
PHP设计模式之迭代器模式
2016/06/17 PHP
php微信开发之批量生成带参数的二维码
2016/06/26 PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
2016/11/16 PHP
JQuery 弹出框定位实现方法
2010/12/02 Javascript
jquery实现侧边弹出的垂直导航
2014/12/09 Javascript
浅谈JavaScript Date日期和时间对象
2014/12/29 Javascript
在js里怎么实现Xcode里的callFuncN方法(详解)
2016/11/05 Javascript
AngularJS动态加载模块和依赖的方法分析
2016/11/08 Javascript
JS+CSS3制作炫酷的弹窗效果
2016/11/08 Javascript
使用jQuery的load方法设计动态加载及解决被加载页面js失效问题
2017/03/01 Javascript
微信通过页面(H5)直接打开本地app的解决方法
2017/09/09 Javascript
node使用Koa2搭建web项目的方法
2017/10/17 Javascript
微信小程序实现换肤功能
2018/03/14 Javascript
微信小程序自定义toast弹窗效果的实现代码
2018/11/15 Javascript
利用d3.js力导布局绘制资源拓扑图实例教程
2019/01/08 Javascript
ES6如何用一句代码实现函数的柯里化
2020/01/18 Javascript
通过vue.extend实现消息提示弹框的方法记录
2021/01/07 Vue.js
jQuery实现购物车全功能
2021/01/11 jQuery
对Python中一维向量和一维向量转置相乘的方法详解
2019/08/26 Python
python配置文件写入过程详解
2019/10/19 Python
python 导入数据及作图的实现
2019/12/03 Python
Django restframework 框架认证、权限、限流用法示例
2019/12/21 Python
Python urlencode和unquote函数使用实例解析
2020/03/31 Python
Python无头爬虫下载文件的实现
2020/04/02 Python
在django admin中配置搜索域是一个外键时的处理方法
2020/05/20 Python
python实现测试工具(二)——简单的ui测试工具
2020/10/19 Python
纯css3制作的火影忍者写轮眼开眼至轮回眼及进化过程实例
2014/11/11 HTML / CSS
亚洲最大的运动鞋寄售店:KicksCrew
2020/11/26 全球购物
机械制造与自动化应届生求职信
2013/11/16 职场文书
简历中求职的个人自我评价
2013/12/03 职场文书
学校庆元旦歌咏比赛主持词
2014/03/18 职场文书
国际残疾人日广播稿范文
2014/10/09 职场文书
邀请函模板
2015/02/02 职场文书
农民工工资支付承诺书
2015/05/04 职场文书
辞职信怎么写?你都知道吗?
2019/06/24 职场文书