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 相关文章推荐
wxpython 学习笔记 第一天
Feb 09 Python
Python实现全局变量的两个解决方法
Jul 03 Python
初学Python实用技巧两则
Aug 29 Python
python里大整数相乘相关技巧指南
Sep 12 Python
Python实现文件复制删除
Apr 19 Python
python实现给微信公众号发送消息的方法
Jun 30 Python
Python安装与基本数据类型教程详解
May 29 Python
python数据处理之如何选取csv文件中某几行的数据
Sep 02 Python
Django框架HttpResponse对象用法实例分析
Nov 01 Python
2021年pycharm的最新安装教程及基本使用图文详解
Apr 03 Python
Python OpenCV快速入门教程
Apr 17 Python
Python Django搭建文件下载服务器的实现
May 10 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
PHP4中session登录页面的应用
2008/07/25 PHP
PHP采集利器 Snoopy 试用心得
2011/07/03 PHP
如何修改和添加Apache的默认站点目录
2013/07/05 PHP
jquery ajax 简单范例(界面+后台)
2013/11/19 Javascript
使用jQuery设置disabled属性与移除disabled属性
2014/08/21 Javascript
使用JS轻松实现ionic调用键盘搜索功能(超实用)
2016/09/06 Javascript
jQuery加载及解析XML文件的方法实例分析
2017/01/22 Javascript
vue刷新和tab切换实例
2018/02/11 Javascript
详解在React.js中使用PureComponent的重要性和使用方式
2018/07/10 Javascript
浅谈Vue CLI 3结合Lerna进行UI框架设计
2019/04/14 Javascript
Vue函数式组件的应用实例详解
2019/08/30 Javascript
简单文件操作python 修改文件指定行的方法
2013/05/15 Python
python3 与python2 异常处理的区别与联系
2016/06/19 Python
python中defaultdict的用法详解
2017/06/07 Python
Python使用回溯法子集树模板解决爬楼梯问题示例
2017/09/08 Python
简单了解python模块概念
2018/01/11 Python
python使用KNN算法手写体识别
2018/02/01 Python
PyQt5每天必学之布局管理
2018/04/19 Python
pandas 转换成行列表进行读取与Nan处理的方法
2018/10/30 Python
对pandas数据判断是否为NaN值的方法详解
2018/11/06 Python
Python自定义一个异常类的方法
2019/06/27 Python
python输出pdf文档的实例
2020/02/13 Python
使用CSS实现弹性视频html5案例实践
2012/12/26 HTML / CSS
加拿大时尚少女服装品牌:Garage
2016/10/10 全球购物
加拿大城市本地限时优惠:Buytopia.ca
2018/09/19 全球购物
有影响力的人、名人和艺术家的官方商品:Represent
2019/11/26 全球购物
社会实践心得体会
2014/01/03 职场文书
抽奖活动主持词
2014/03/31 职场文书
小学生植树节活动总结
2014/07/04 职场文书
网吧消防安全责任书
2014/07/29 职场文书
2015年中秋节活动总结
2015/03/23 职场文书
中学教师教学工作总结
2015/08/13 职场文书
Python采集爬取京东商品信息和评论并存入MySQL
2022/04/12 Python
python数字图像处理实现图像的形变与缩放
2022/06/28 Python
jdbc中自带MySQL 连接池实践示例
2022/07/23 MySQL
修改Nginx配置返回指定content-type的方法
2022/09/23 Servers