是否可以设置同一会话中所有池连接之间共享的最大重试次数?

问题描述 投票:6回答:1

目前,我执行以下操作来设置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()对象似乎是在每次总呼叫减少时创建的?

session request python-requests grequests
1个回答
0
投票

我觉得你运气不好。 Retry docstring说(摘录):

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

所以,就像你说的那样,每个连接都会产生一个新的对象......而这是通过设计完成的。

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

© www.soinside.com 2019 - 2024. All rights reserved.