我正在使用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)
但这无助于减慢速度。
答案 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进行重试。