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 从远程服务器下载日志文件的程序
Feb 10 Python
关于Python中异常(Exception)的汇总
Jan 18 Python
python实现简单中文词频统计示例
Nov 08 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
Jun 20 Python
Python实现常见的回文字符串算法
Nov 14 Python
Python实现针对json中某个关键字段进行排序操作示例
Dec 25 Python
python issubclass 和 isinstance函数
Jul 25 Python
Python基础之变量基本用法与进阶详解
Jan 03 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
Feb 26 Python
Django认证系统user对象实现过程解析
Mar 02 Python
Python实现socket库网络通信套接字
Jun 04 Python
python ConfigParser库的使用及遇到的坑
Feb 12 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
人大复印资料处理程序_输入篇
2006/10/09 PHP
PHPStrom中实用的功能和快捷键大全
2015/09/23 PHP
Yii2.0 模态弹出框+ajax提交表单
2016/05/22 PHP
PHP读取word文档的方法分析【基于COM组件】
2017/08/01 PHP
PHP 7.4中使用预加载的方法详解
2019/07/08 PHP
JS 继承实例分析
2008/11/04 Javascript
QQ空间顶部折页撕开效果示例代码
2014/06/15 Javascript
JS逆序遍历实现代码
2014/12/02 Javascript
JavaScript中原型和原型链详解
2015/02/11 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
使用requestAnimationFrame实现js动画性能好
2015/08/06 Javascript
整理Javascript函数学习笔记
2015/12/01 Javascript
jQuery事件绑定用法详解
2016/09/08 Javascript
BootStrap轻松实现微信页面开发代码分享
2016/10/21 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
2017/03/24 jQuery
jQuery实现节点的追加、替换、删除、复制功能示例
2017/07/11 jQuery
Windows下使用Nodejs运行js的方法
2017/09/02 NodeJs
微信小程序使用modal组件弹出对话框功能示例
2017/11/29 Javascript
web前端vue filter 过滤器
2018/01/12 Javascript
零基础之Node.js搭建API服务器的详解
2019/03/08 Javascript
layui 弹出删除确认界面的实例
2019/09/06 Javascript
vue实现数字滚动效果
2020/06/29 Javascript
Python的Flask框架中集成CKeditor富文本编辑器的教程
2016/06/13 Python
python爬虫_自动获取seebug的poc实例
2017/08/05 Python
Python实现的knn算法示例
2018/06/14 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
2019/06/11 Python
Python缓存技术实现过程详解
2019/09/25 Python
使用Python实现音频双通道分离
2020/12/25 Python
python实现不同数据库间数据同步功能
2021/02/25 Python
html5在移动端的屏幕适应问题示例探讨
2014/06/15 HTML / CSS
优衣库澳大利亚官网:UNIQLO澳大利亚
2017/01/18 全球购物
阿尔卡特(中国)的面试题目
2014/08/20 面试题
日语专业毕业生自荐书
2014/06/18 职场文书
合同和协议有什么区别?
2014/10/08 职场文书
医者仁心观后感
2015/06/17 职场文书
2016年习总书记讲话学习心得体会
2016/01/20 职场文书