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

Lee*_*ren 6 session request python-requests grequests

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

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

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

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

最后,这些都是最终发布的grequests.map(requests, ...).

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

slu*_*shy 0

我认为你不走运。文档字符串Retry说(摘录):

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

因此,正如您所说,每个连接都会创建一个新对象......这是通过设计完成的。

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