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正则表达式介绍
Aug 06 Python
pycharm 使用心得(六)进行简单的数据库管理
Jun 06 Python
python爬虫实战之爬取京东商城实例教程
Apr 24 Python
Python获取SQLite查询结果表列名的方法
Jun 21 Python
Python3标准库总结
Feb 19 Python
python中pytest收集用例规则与运行指定用例详解
Jun 27 Python
解决Django Static内容不能加载显示的问题
Jul 28 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
Aug 13 Python
关于Keras Dense层整理
May 21 Python
详解Python多线程下的list
Jul 03 Python
Python远程方法调用实现过程解析
Jul 28 Python
python实现Nao机器人的单目测距
Sep 04 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验证手机号码(支持归属地查询及编码为UTF8)
2013/02/01 PHP
PHP获取时间排除周六、周日的两个方法
2014/06/30 PHP
PHP面向对象多态性实现方法简单示例
2017/09/27 PHP
jQuery live( type, fn ) 委派事件实现
2009/10/11 Javascript
一个js导致的jquery失效问题的解决方法
2013/11/27 Javascript
jquery学习总结(超级详细)
2014/09/04 Javascript
js实现HashTable(哈希表)的实例分析
2016/11/21 Javascript
Bootstrap基本插件学习笔记之按钮(21)
2016/12/08 Javascript
JS实现图片高斯模糊切换效果的焦点图实例
2017/01/21 Javascript
BootStrap Datepicker 插件修改为默认中文的实现方法
2017/02/10 Javascript
微信小程序事件 bindtap bindinput代码实例
2019/08/26 Javascript
vue 动态组件用法示例小结
2020/03/06 Javascript
[13:21]DOTA2国际邀请赛采访专栏:RSnake战队国士无双,Fnatic.Fly
2013/08/06 DOTA
python使用点操作符访问字典(dict)数据的方法
2015/03/16 Python
wxPython中listbox用法实例详解
2015/06/01 Python
如何利用Python分析出微信朋友男女统计图
2019/01/25 Python
python生成带有表格的图片实例
2019/02/03 Python
教你一步步利用python实现贪吃蛇游戏
2019/06/27 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
2020/04/07 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
2020/06/18 Python
python编写实现抽奖器
2020/09/10 Python
利用CSS3实现圆角的outline效果的教程
2015/06/05 HTML / CSS
HTML5 canvas基本绘图之绘制阴影效果
2016/06/27 HTML / CSS
波兰在线儿童和婴儿用品零售商:pinkorblue
2019/06/29 全球购物
使用索引有什么好处
2016/07/27 面试题
微博营销计划书
2014/01/10 职场文书
五星级酒店餐饮部总监的标准岗位职责
2014/02/17 职场文书
幼儿园小班评语大全
2014/04/17 职场文书
财务内勤岗位职责
2014/04/17 职场文书
知识改变命运演讲稿
2014/05/21 职场文书
电气自动化求职信
2014/06/24 职场文书
房屋鉴定委托书范本
2014/09/23 职场文书
致男子1500米运动员的广播稿
2019/11/08 职场文书
Python 语言实现六大查找算法
2021/06/30 Python
Python面向对象编程之类的概念
2021/11/01 Python
PostgreSQL数据库去除重复数据和运算符的基本查询操作
2022/04/12 PostgreSQL