6

grequest目前,我执行以下操作来为我的包装器设置最大连接重试次数:

self._s = Session()
retries = Retry(total=5, status_forcelist=[500, 502, 503, 504])
self._s.mount('http://, HTTPAdapter(max_retries=retries))

grequest然后,我以会话self._s作为参数之一创建了一堆对象。例如,创建一组GET请求将使用以下方式完成:

requests = [grequests.get(url, ..., 'session': self._s')]

最后,这些最终都使用grequests.map(requests, ...).

问题是我想要一种使最大重试次数持续存在并在连接池的所有连接之间共享的方法。重试似乎仍然仅适用于单个连接。有什么可能的方法吗?这是不可能的,因为新Retry()对象似乎是在每次减少总调用时创建的?

4

1 回答 1

0

我觉得你运气不好。文档字符串说(Retry摘录):

每次重试尝试都会创建一个具有更新值的新 Retry 对象,因此可以安全地重用它们。

因此,就像您所说的,每个连接都创建了一个新对象……这是设计使然。

此外,Retry对象本身允许线程:它在连接尝试之间休眠。因此,按照这种设计,一个Retry对象必须与一个线程相关联。对不起。这是一个链接urllib.utils.retry,以防万一。

于 2017-12-25T20:07:57.203 回答