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 02 Python
python通过自定义isnumber函数判断字符串是否为数字的方法
Apr 23 Python
在Python中处理XML的教程
Apr 29 Python
python类和函数中使用静态变量的方法
May 09 Python
python利用matplotlib库绘制饼图的方法示例
Dec 18 Python
Python排序搜索基本算法之插入排序实例分析
Dec 11 Python
全面分析Python的优点和缺点
Feb 07 Python
TensorFlow实现AutoEncoder自编码器
Mar 09 Python
numpy创建单位矩阵和对角矩阵的实例
Nov 29 Python
Python包,__init__.py功能与用法分析
Jan 07 Python
给Django Admin添加验证码和多次登录尝试限制的实现
Jul 26 Python
Python Opencv实现单目标检测的示例代码
Sep 08 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 操作excel文件的方法小结
2009/12/31 PHP
PHP 字符串正则替换函数preg_replace使用说明
2011/07/15 PHP
php后退一页表单内容保存实现方法
2012/06/17 PHP
php+webSoket实现聊天室示例代码(附源码)
2017/02/17 PHP
JS+CSS实现可拖拽的漂亮圆角特效弹出层完整实例
2015/02/13 Javascript
javascript中eval和with用法实例总结
2015/11/30 Javascript
Bootstrap的Refresh Icon也spin起来
2016/07/13 Javascript
Vue.js每天必学之过渡与动画
2016/09/06 Javascript
JavaScript 继承详解(五)
2016/10/11 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
2016/11/20 Javascript
AngularJS 教程及实例代码
2017/10/23 Javascript
vue 项目打包通过命令修改 vue-router 模式 修改 API 接口前缀
2018/06/13 Javascript
Vue-component全局注册实例
2018/09/06 Javascript
Vue.js组件高级特性实例详解
2018/12/24 Javascript
JavaScript Dom 绑定事件操作实例详解
2019/10/02 Javascript
手动实现vue2.0的双向数据绑定原理详解
2021/02/06 Vue.js
[47:04]EG vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
[01:33]完美世界DOTA2联赛PWL S3 集锦第二期
2020/12/21 DOTA
深入源码解析Python中的对象与类型
2015/12/11 Python
用Python将动态GIF图片倒放播放的方法
2016/11/02 Python
安装Python和pygame及相应的环境变量配置(图文教程)
2017/06/04 Python
详解python实现小波变换的一个简单例子
2019/07/18 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
2019/10/18 Python
Python爬取爱奇艺电影信息代码实例
2019/11/26 Python
Python解释器以及PyCharm的安装教程图文详解
2020/02/26 Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
2020/03/06 Python
应聘医药代表职位求职信
2013/10/21 职场文书
理工科学生的自我评价
2013/12/15 职场文书
电脑租赁公司创业计划书
2014/01/08 职场文书
《王二小》教学反思
2014/02/27 职场文书
2014公安机关纪律作风整顿思想汇报
2014/09/13 职场文书
运动会1000米加油稿
2015/07/21 职场文书
golang中切片copy复制和等号复制的区别介绍
2021/04/27 Golang
my.ini优化mysql数据库性能的十个参数(推荐)
2021/05/26 MySQL
使用JS实现简易计算器
2021/06/14 Javascript
Python实现将多张图片合成MP4视频并加入背景音乐
2022/04/28 Python