如何捕获503错误并重试请求

时间:2016-10-12 22:07:22

标签: python python-requests grequests

我正在使用grequests拨打大约10,000个电话,但其中一些电话会以503的形式返回。如果我不一次排队所有10,000个呼叫,这个问题就消失了。将它分成1000组似乎可以解决问题。但是,我想知道是否有办法捕获此503错误并重试request

这就是我调用和组合线程的方式:

import grequests
rs = (grequests.get(u, headers=header) for u in urls)
response = grequests.map(rs)

我知道这真的很模糊,但我甚至不知道使用grequests是否可行。

我纳维利试过

import grequests
rs = (grequests.get(u, headers=header) for u in urls)
time.sleep(1)
response = grequests.map(rs)

但这无助于减慢速度。

2 个答案:

答案 0 :(得分:2)

也许您可以尝试使用事件挂钩来捕获错误并重新启动请求http://docs.python-requests.org/en/master/user/advanced/#event-hooks

 import grequests

 def response_handler(response):
     if response.status_code == '503':
         print('error.503')

 rs = (grequests.get(u, headers=header, hooks = dict('response' : response_handler)) for u in urls)
 response = grequests.map(rs)`

答案 1 :(得分:0)

您应该能够应用所描述的一般方法  假设grequests允许您自定义基础连接或请求,Can I set max_retries for requests.request?配置请求和urllib3进行重试。