是否可以设置同一会话中所有池连接之间共享的最大重试次数?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否可以设置同一会话中所有池连接之间共享的最大重试次数?相关的知识,希望对你有一定的参考价值。
目前,我执行以下操作来设置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()
对象似乎是在每次总呼叫减少时创建的?
答案
我觉得你运气不好。 Retry
docstring说(摘录):
每次重试尝试都将创建一个具有更新值的新Retry对象,因此可以安全地重用它们。
所以,就像你说的那样,每个连接都会产生一个新的对象......而这是通过设计完成的。
此外,Retry
对象本身是允许线程的:它在连接尝试之间休眠。因此,通过这种设计,一个Retry
对象必须与一个线程相关联。抱歉。这是urllib.utils.retry
的链接以防万一。
以上是关于是否可以设置同一会话中所有池连接之间共享的最大重试次数?的主要内容,如果未能解决你的问题,请参考以下文章