我有一个url列表,我想使用Python的grequests
模块做一个HTTP Get请求。
有些URL不返回OK状态,在这种情况下,我想重试那个URL。
我可以使用一个Queue来做到这一点,这个Queue存储了所有还没有尝试过的url,或者那些在以前的尝试中没有返回200的url,并继续批量发送请求。我正在寻找一个更干净/更"python化"的实现。
我以前使用过retrying
模块进行重试,它非常整洁。我想知道是否有一些类似的,简洁的实现来重试请求发送的请求。
您可以将自己的请求会话传递给请求,并在该会话上设置重试。
s = requests.Session()
retries = Retry(total=5, backoff_factor=0.2, status_forcelist=[500, 502, 503, 504], raise_on_redirect=True,
raise_on_status=True)
s.mount('http://', HTTPAdapter(max_retries=retries))
s.mount('https://', HTTPAdapter(max_retries=retries))
reqs = (grequests.get(url, session=s) for url in urls)
for resp in grequests.imap(reqs, stream=False):
...
如果你想要流式传输,可以设置stream=True