2014-10-12 33 views
3

這是我的代碼。請求是否在重試之後執行重試方法?

import requests,time 
proxies = {'http':'36.33.1.177:21219'} 
url='http://218.94.78.61:8080/newPub/service/json/call?serviceName=sysBasicManage&methodName=queryOutputOtherPollutionList&paramsJson=%7B%22ticket%22:%22451a9846-058b-4944-86c6-fccafdb7d8d0%22,%22parameter%22:%7B%22monitorSiteType%22:%2202%22,%22enterpriseCode%22:%22320100000151%22,%22monitoringType%22:%222%22%7D%7D' 

i = 0 
a = requests.adapters.HTTPAdapter(max_retries=10) 
s = requests.Session() 
s.mount(url, a) 
for x in xrange(1,1000): 
    time.sleep(1) 
    print x 
    try: 
     r= s.get(url,proxies=proxies) 
     print r 
    except Exception as ee: 
     i = i + 1 
     print ee 
     print 'i=%s' % i 

的代理是一個小unstabitily,所以我成立了MAX_RETRIES,但它仍然有例外,有時,所以有在每個重試一些secondes後執行一些方法?

回答

9

只有requests庫是不可能的。但是,您可以使用外部庫,如backoff

backoff提供了一個裝飾器,你可以將它包裝在你的函數中。示例代碼:

@backoff.on_exception(backoff.constant, 
         requests.exceptions.RequestException, 
         max_tries=10, interval=10) 
def get_url(url): 
    return requests.get(url) 

上面代碼等待10秒下一次重試上的requests.exceptions.RequestException每個異常並嘗試爲10倍,如在max_tries指定。

+0

thanks.it工作 – no13bus 2014-10-14 02:15:55

+0

如果幫助你,你能接受我的答案嗎? – avi 2014-10-14 02:44:03

+0

對不起。我忘記了。我只用了幾天的計算器。再次感謝。 – no13bus 2014-10-14 04:41:31