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通过pil模块将raw图片转换成png图片的方法
Mar 16 Python
python实现可将字符转换成大写的tcp服务器实例
Apr 29 Python
Python爬取网页中的图片(搜狗图片)详解
Mar 23 Python
Python面向对象特殊成员
Apr 24 Python
Python使用wxPython实现计算器
Jan 30 Python
pandas实现DataFrame显示最大行列,不省略显示实例
Dec 26 Python
Python3 读取Word文件方式
Feb 13 Python
windows python3安装Jupyter Notebooks教程
Apr 13 Python
Python实现进度条和时间预估的示例代码
Jun 02 Python
python pymysql链接数据库查询结果转为Dataframe实例
Jun 05 Python
使用python编写一个语音朗读闹钟功能的示例代码
Jul 14 Python
Python 数据可视化工具 Pyecharts 安装及应用
Apr 20 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/03 咖啡文化
PHP 万年历实现代码
2012/10/18 PHP
PHP中文分词 自动获取关键词介绍
2012/11/13 PHP
javascript:void(0)的真正含义实例分析
2008/08/20 Javascript
解决AJAX中跨域访问出现'没有权限'的错误
2008/08/20 Javascript
jquery 将disabled的元素置为enabled的三种方法
2009/07/25 Javascript
用jquery ajax获取网站Alexa排名的代码
2009/12/12 Javascript
对js关键字命名的疑问介绍
2014/04/25 Javascript
在JavaScript中重写jQuery对象的方法实例教程
2014/08/25 Javascript
Angular 4.x 路由快速入门学习
2017/05/03 Javascript
vue2.0实现分页组件的实例代码
2017/06/22 Javascript
vue.js数据绑定操作详解
2018/04/23 Javascript
解决vue cli使用typescript后打包巨慢的问题
2019/09/30 Javascript
[01:01:18]VP vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
[01:06:30]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第二场 1月9日
2021/03/11 DOTA
python中使用urllib2获取http请求状态码的代码例子
2014/07/07 Python
Python代码的打包与发布详解
2014/07/30 Python
Python简单的制作图片验证码实例
2017/05/31 Python
python 使用正则表达式按照多个空格分割字符的实例
2018/12/20 Python
python绘制玫瑰的实现代码
2020/03/02 Python
python 发送邮件的四种方法汇总
2020/12/02 Python
CSS3实现同时执行倾斜和旋转的动画效果
2016/10/27 HTML / CSS
HTML5在IE10、火狐下中文乱码问题的解决方法
2013/11/18 HTML / CSS
澳大利亚免息网上购物:Shop Zero
2016/09/17 全球购物
Topshop法国官网:英国快速时尚品牌
2018/04/08 全球购物
澳洲健康食品网上商店:Aussie Health Products
2018/06/15 全球购物
MADE法国:提供原创设计师家具
2018/09/18 全球购物
MYSQL基础面试题
2012/05/13 面试题
金融专业毕业生推荐信
2013/11/26 职场文书
个人教师自我评价范文
2013/12/02 职场文书
社团文化节邀请函
2014/01/10 职场文书
个人作风剖析材料
2014/02/02 职场文书
离婚协议书怎么写(范本参考)
2014/09/30 职场文书
北京颐和园导游词
2015/01/30 职场文书
企业法人代表证明书
2015/06/18 职场文书
装修安全责任协议书
2016/03/22 职场文书