1

我有一个 URL 列表,我想使用 Python 的grequests模块对其进行 HTTP Get 请求。

某些 URL 不返回 OK 状态,在这种情况下,我想重试该 URL。

我可以使用一个队列来执行此操作,该队列存储所有尚未尝试过的 URL,或者在以前的尝试中未返回 200 的 URL,并继续批量发送请求。不过,我正在为此寻找一个更清洁/更“Pythonic”的实现。

我之前使用过该retrying模块进行重试,它非常整洁。我想知道是否有一些类似的、简洁的实现来重试 grequests 发送的请求。

4

1 回答 1

10

您可以将自己的请求会话传递给 grequests 并在该会话上设置重试,即。

    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 。

于 2016-11-23T10:03:16.083 回答