4

我过去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.

我naivley试过

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

但这并不能减慢它的速度。

4

2 回答 2

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)`
于 2016-10-13T00:22:35.220 回答
0

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

于 2017-10-15T21:03:52.433 回答