有時(shí)候我們要去別的接口取數(shù)據(jù),可能因?yàn)榫W(wǎng)絡(luò)原因偶爾失敗,為了能自動(dòng)重試,寫了這么一個(gè)裝飾器。
這個(gè)是python2.7x 的版本,python3.x可以用 nonlocal 來重寫。
#-*- coding: utf-8 -*- #all decorators in this tool file #author: orangleliu ############################################################ #http連接有問題時(shí)候,自動(dòng)重連 def conn_try_again(function): RETRIES = 0 #重試的次數(shù) 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
用法很的簡(jiǎn)單,下面是一個(gè)程序片段。
@conn_try_again def post_query_bandwidth_for_bandwidth(self, contract_no, data_month, product_code): #根據(jù)webluker接口情況獲取計(jì)費(fèi)數(shù)據(jù) 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塊中有異常,就會(huì)自動(dòng)重試2次。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
