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 lambda和Python def区别分析
Nov 30 Python
用实例分析Python中method的参数传递过程
Apr 02 Python
在Python中使用模块的教程
Apr 27 Python
python通过ftplib登录到ftp服务器的方法
May 08 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
Dec 14 Python
Python Numpy 数组的初始化和基本操作
Mar 13 Python
分析运行中的 Python 进程详细解析
Jun 22 Python
Django 框架模型操作入门教程
Nov 05 Python
python计算二维矩形IOU实例
Jan 18 Python
python 错误处理 assert详解
Apr 20 Python
Python通过类的组合模拟街道红绿灯
Sep 16 Python
Pandas 稀疏数据结构的实现
Jul 25 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&amp;mysql(六)
2006/10/09 PHP
PHP中cookies使用指南
2007/03/16 PHP
PHP中json_encode、json_decode与serialize、unserialize的性能测试分析
2010/06/09 PHP
PHP中去除换行解决办法小结(PHP_EOL)
2011/11/27 PHP
ThinkPHP5框架缓存查询操作分析
2018/05/30 PHP
javascript编程起步(第四课)
2007/01/10 Javascript
Js 刷新框架页的代码
2010/04/13 Javascript
javascript实现文本域写入字符时限定字数
2014/02/12 Javascript
22点关于jquery性能优化的建议
2014/05/28 Javascript
JavaScript实现的一个计算数字步数的算法分享
2014/12/06 Javascript
js实现仿百度瀑布流的方法
2015/02/05 Javascript
JQuery导航菜单选择特效
2016/04/11 Javascript
JS高级运动实例分析
2016/12/20 Javascript
微信小程序 wx.login解密出现乱码的问题解决办法
2017/03/10 Javascript
Bootstrap 表单验证formValidation 实现远程验证功能
2017/05/17 Javascript
Angular开发实践之服务端渲染
2018/03/29 Javascript
微信小程序tabBar 返回tabBar不刷新页面
2019/07/25 Javascript
浅析vue cli3 封装Svgicon组件正确姿势(推荐)
2020/04/27 Javascript
[05:39]2014DOTA2国际邀请赛 DK晋级胜者组专访战队国士无双
2014/07/14 DOTA
python使用标准库根据进程名如何获取进程的pid详解
2017/10/31 Python
Python简易版停车管理系统
2019/08/12 Python
python tkinter图形界面代码统计工具
2019/09/18 Python
python默认参数调用方法解析
2020/02/09 Python
使用 Python 在京东上抢口罩的思路详解
2020/02/27 Python
浅谈matplotlib.pyplot与axes的关系
2020/03/06 Python
基于python实现MQTT发布订阅过程原理解析
2020/07/27 Python
联想台湾官网:Lenovo TW
2018/05/09 全球购物
丝绸和人造花卉、植物和树木:Nearly Natural
2018/11/28 全球购物
美国购买舞会礼服网站:Couture Candy
2019/12/29 全球购物
人事专员岗位职责
2013/11/20 职场文书
交通法规咨询中心工作职责
2013/11/27 职场文书
如何打造一封优秀的留学推荐信
2014/01/25 职场文书
小学综治宣传月活动总结
2014/07/02 职场文书
酒店爱岗敬业演讲稿
2014/09/02 职场文书
班主任工作实习计划
2015/01/16 职场文书
关于远足的感想
2015/08/10 职场文书