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 07 Python
python使用PyGame播放Midi和Mp3文件的方法
Apr 24 Python
详解Django缓存处理中Vary头部的使用
Jul 24 Python
Django卸载之后重新安装的方法
Mar 15 Python
python文件操作之批量修改文件后缀名的方法
Aug 10 Python
Django实现web端tailf日志文件功能及实例详解
Jul 28 Python
Pycharm 2019 破解激活方法图文详解
Oct 11 Python
Python 3.8 新功能来一波(大部分人都不知道)
Mar 11 Python
python计算Content-MD5并获取文件的Content-MD5值方式
Apr 03 Python
TensorFlow tf.nn.conv2d_transpose是怎样实现反卷积的
Apr 20 Python
Python 的 __str__ 和 __repr__ 方法对比
Sep 02 Python
Python实现敏感词过滤的4种方法
Sep 12 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获取windows登录用户名的方法
2014/06/24 PHP
php 反斜杠处理函数addslashes()和stripslashes()实例详解
2016/12/25 PHP
PHP PDOStatement::debugDumpParams讲解
2019/01/30 PHP
javascript入门·对象属性方法大总结
2007/10/01 Javascript
基于js disabled=&quot;false&quot;不起作用的解决办法
2013/06/26 Javascript
javascript阻止scroll事件多次执行的思路及实现
2013/11/08 Javascript
raphael.js绘制中国地图 地图绘制方法
2014/02/12 Javascript
jQuery图片特效插件Revealing实现拉伸放大
2015/04/22 Javascript
javascript仿百度输入框提示自动下拉补全
2016/01/07 Javascript
Bootstrap中的Panel和Table全面解析
2016/06/13 Javascript
Javascript 事件冒泡机制详细介绍
2016/10/10 Javascript
jQuery插件zTree实现单独选中根节点中第一个节点示例
2017/03/08 Javascript
微信小程序实践之动态控制组件的显示/隐藏功能
2018/07/18 Javascript
vue滚动插件better-scroll使用详解
2019/10/18 Javascript
Vue-cli4 配置 element-ui 按需引入操作
2020/09/11 Javascript
python从网络读取图片并直接进行处理的方法
2015/05/22 Python
pandas.DataFrame选取/排除特定行的方法
2018/07/03 Python
Python 3.8 新功能全解
2019/07/25 Python
更新pip3与pyttsx3文字语音转换的实现方法
2019/08/08 Python
Python加密模块的hashlib,hmac模块使用解析
2020/01/02 Python
TensorFlow实现自定义Op方式
2020/02/04 Python
pycharm软件实现设置自动保存操作
2020/06/08 Python
css3实现3D色子翻转特效
2014/12/23 HTML / CSS
详解Html5 Canvas画线有毛边解决方法
2018/03/01 HTML / CSS
解决H5的a标签的download属性下载service上的文件出现跨域问题
2019/07/16 HTML / CSS
深入理解HTML5定时器requestAnimationFrame的使用
2018/12/12 HTML / CSS
THE OUTNET英国官网:国际设计师品牌折扣网站
2016/08/14 全球购物
马来西亚银饰品牌:JEOEL
2017/12/15 全球购物
植村秀加拿大官网:Shu Uemura加拿大
2019/09/03 全球购物
影视动画专业个人的自我评价
2013/12/31 职场文书
副职竞争上岗演讲稿
2014/05/12 职场文书
班主任工作总结范文
2015/08/13 职场文书
2015年大学组织委员个人工作总结
2015/10/23 职场文书
Jsonp劫持学习
2021/04/01 PHP
Spring Data JPA框架自定义Repository接口
2022/04/28 Java/Android
3050和2060哪个好 性能差多少 差距有多大 谁更有性价比
2022/06/17 数码科技