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语句声明匿名函数的用法
Jul 01 Python
python使用Tesseract库识别验证
Mar 21 Python
python 读取txt,json和hdf5文件的实例
Jun 05 Python
Python实用技巧之列表、字典、集合中根据条件筛选数据详解
Jul 11 Python
python读取word文档,插入mysql数据库的示例代码
Nov 07 Python
使用pandas实现连续数据的离散化处理方式(分箱操作)
Nov 22 Python
pytorch中的自定义数据处理详解
Jan 06 Python
将matplotlib绘图嵌入pyqt的方法示例
Jan 08 Python
Python字符编码转码之GBK,UTF8互转
Feb 09 Python
Python2.7:使用Pyhook模块监听鼠标键盘事件-获取坐标实例
Mar 14 Python
python中逻辑与或(and、or)和按位与或异或(&amp;、|、^)区别
Aug 05 Python
这样写python注释让代码更加的优雅
Jun 02 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中最简单的字符串匹配算法
2014/12/16 PHP
Opcache导致php-fpm崩溃nginx返回502
2015/03/02 PHP
php三元运算符知识汇总
2015/07/02 PHP
PHP如何根据文件头检测文件类型实例代码
2018/10/14 PHP
PHP addslashes()函数讲解
2019/02/03 PHP
动态加载js文件 document.createElement
2006/10/14 Javascript
JQuery 表格操作(交替显示、拖动表格行、选择行等)
2009/07/29 Javascript
javascript 快速排序函数代码
2012/05/30 Javascript
Jquery 切换不同图片示例代码
2013/12/05 Javascript
jQuery1.9.1源码分析系列(十六)ajax之ajax框架
2015/12/04 Javascript
基于Bootstrap实现图片轮播效果
2016/05/22 Javascript
详解node如何让一个端口同时支持https与http
2017/07/04 Javascript
JavaScript基础进阶之数组方法总结(推荐)
2017/09/04 Javascript
从对象列表中获取一个对象的方法,依据关键字和值
2017/09/20 Javascript
react-native 圆弧拖动进度条实现的示例代码
2018/04/12 Javascript
在Koa.js中实现文件上传的接口功能
2019/10/08 Javascript
React中获取数据的3种方法及优缺点
2020/02/18 Javascript
vue路由切换时取消之前的所有请求操作
2020/09/01 Javascript
在Python中使用Neo4j数据库的教程
2015/04/16 Python
Python中的日期时间处理详解
2016/11/17 Python
python 调用HBase的简单实例
2016/12/18 Python
详解pyenv下使用python matplotlib模块的问题解决
2018/11/29 Python
远程部署工具Fabric详解(支持Python3)
2019/07/04 Python
对django views中 request, response的常用操作详解
2019/07/17 Python
django框架使用方法详解
2019/07/18 Python
python lambda的使用详解
2021/02/26 Python
超级搞笑检讨书
2014/01/15 职场文书
三八节主持词
2014/03/17 职场文书
揭牌仪式策划方案
2014/05/28 职场文书
今冬明春火灾防控工作方案
2014/05/29 职场文书
医学专业毕业生求职信
2014/06/20 职场文书
反腐倡廉剖析材料
2014/09/30 职场文书
课程设计感想范文
2015/08/11 职场文书
Win11怎么修改电源模式?Win11修改电源模式的方法
2022/04/05 数码科技
vue中this.$http.post()跨域和请求参数丢失的解决
2022/04/08 Vue.js
mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构
2022/04/20 MySQL