Python自动重试HTTP连接装饰器

这篇文章主要介绍了Python自动重试HTTP连接装饰器,有时候我们要去别的接口取数据,可能因为网络原因偶尔失败,为了能自动重试,写了这么一个装饰器,可以实现自动重连2次,需要的朋友可以参考下

有时候我们要去别的接口取数据,可能因为网络原因偶尔失败,为了能自动重试,写了这么一个装饰器。
这个是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 时间:2014-04-18 人气:10
本文关键词: python 连接 Http 装饰器 自动重试
分享到:

相关文章

iOS 开发

Android 开发

Python 开发

JAVA 开发

开发语言

PHP 开发

Ruby 开发

搜索

前端开发

数据库

开发工具

开放平台

Javascript 开发

.NET 开发

云计算

服务器

Copyright (C) codeweblog.com, All Rights Reserved.

CodeWeblog.com 版权所有 闽ICP备15018612号

processed in 0.036 (s). 12 q(s)