Python自動重試HTTP連接裝飾器
有時候我們要去別的接口取數(shù)據(jù),可能因為網(wǎng)絡(luò)原因偶爾失敗,為了能自動重試,寫了這么一個裝飾器。
這個是python2.7x 的版本,python3.x可以用 nonlocal 來重寫。
#-*- coding: utf-8 -*- #all decorators in this tool file #author: orangleliu ############################################################ #http連接有問題時候,自動重連 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
用法很的簡單,下面是一個程序片段。
@conn_try_again def post_query_bandwidth_for_bandwidth(self, contract_no, data_month, product_code): #根據(jù)webluker接口情況獲取計費(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塊中有異常,就會自動重試2次。
相關(guān)文章
python的mysql數(shù)據(jù)庫建立表與插入數(shù)據(jù)操作示例
這篇文章主要介紹了python的mysql數(shù)據(jù)庫建立表與插入數(shù)據(jù)操作,結(jié)合實例形式分析了python操作mysql數(shù)據(jù)庫建立表與插入數(shù)據(jù)相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2019-09-09Python使用multiprocessing創(chuàng)建進(jìn)程的方法
這篇文章主要介紹了Python使用multiprocessing創(chuàng)建進(jìn)程的方法,實例分析了multiprocessing模塊操作進(jìn)程的相關(guān)技巧,需要的朋友可以參考下2015-06-06Python連接Oracle之環(huán)境配置、實例代碼及報錯解決方法詳解
這篇文章主要介紹了Python連接Oracle之環(huán)境配置、實例代碼及報錯解決方法詳解,需要的朋友可以參考下2020-02-02Anaconda安裝之后Spyder打不開解決辦法(親測有效!)
這篇文章主要給大家介紹了關(guān)于Anaconda安裝之后Spyder打不開解決辦法,文中將解決的過程介紹的非常詳細(xì),親測有效,對同樣遇到這個問題的朋友具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2023-04-04利用Django提供的ModelForm增刪改數(shù)據(jù)的方法
這篇文章主要介紹了利用Django提供的ModelForm增刪改數(shù)據(jù),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01