2014-10-12 34 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