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 09 Python
python3.4用循环往mysql5.7中写数据并输出的实现方法
Jun 20 Python
Python随机生成手机号、数字的方法详解
Jul 21 Python
解决DataFrame排序sort的问题
Jun 07 Python
解决Shell执行python文件,传参空格引起的问题
Oct 30 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
Dec 22 Python
Python中整数的缓存机制讲解
Feb 16 Python
Python字符串逆序输出的实例讲解
Feb 16 Python
对pytorch中的梯度更新方法详解
Aug 20 Python
使用 Python 写一个简易的抽奖程序
Dec 08 Python
python3.6环境下安装freetype库和基本使用方法(推荐)
May 10 Python
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
Jun 13 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的变量总结 新手推荐
2011/04/18 PHP
php实现购物车功能(上)
2020/07/23 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解
2019/07/15 PHP
PHP使用Session实现上传进度功能详解
2019/08/06 PHP
利用jQuery操作对象数组的实现代码
2011/04/27 Javascript
利用jquery动画特效和css打造的侧边弹出垂直导航
2014/04/04 Javascript
基于jQuery实现文本框缩放以及上下移动功能
2014/11/24 Javascript
javascript 实现 原路返回
2015/01/21 Javascript
JS中常用的输出方式(五种)
2016/06/12 Javascript
jQuery实现鼠标点击处心形漂浮的炫酷效果示例
2018/04/12 jQuery
IE8中jQuery.load()加载页面不显示的原因
2018/11/15 jQuery
原生js实现移动端Touch轮播图的方法步骤
2019/01/03 Javascript
微信接入之获取用户头像的方法步骤
2019/09/23 Javascript
微信小程序以ssm做后台开发的实现示例
2020/04/08 Javascript
JS+CSS实现炫酷光感效果
2020/09/05 Javascript
[02:52]DOTA2新手基础教程 米波
2014/01/21 DOTA
python字典的常用操作方法小结
2016/05/16 Python
举例讲解Python中字典的合并值相加与异或对比
2016/06/04 Python
mac PyCharm添加Python解释器及添加package路径的方法
2018/10/29 Python
python pandas获取csv指定行 列的操作方法
2019/07/12 Python
PYTHON绘制雷达图代码实例
2019/10/15 Python
python垃圾回收机制(GC)原理解析
2019/12/30 Python
下载与当前Chrome对应的chromedriver.exe(用于python+selenium)
2020/01/14 Python
推荐值得学习的12款python-web开发框架
2020/08/10 Python
python爬取代理IP并进行有效的IP测试实现
2020/10/09 Python
重构Python代码的六个实例
2020/11/25 Python
matplotlib部件之套索Lasso的使用
2021/02/24 Python
联想马亚西亚官方网站:Lenovo Malaysia
2018/09/19 全球购物
Swanson中国官网:美国斯旺森健康产品公司
2021/03/01 全球购物
个人自我剖析材料
2014/02/07 职场文书
《路旁的橡树》教学反思
2014/04/07 职场文书
运输企业安全生产责任书
2014/07/28 职场文书
大学教师师德师风演讲稿
2014/08/22 职场文书
2016年领导干部廉政承诺书
2016/03/24 职场文书
2016年清明节网上祭英烈活动总结
2016/04/01 职场文书