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

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的链接以防万一。

以上是关于是否可以设置同一会话中所有池连接之间共享的最大重试次数?的主要内容,如果未能解决你的问题,请参考以下文章

在多个客户端之间共享 Jabber 聊天会话

tcp长连接短连接连接池的思考

Oracle会话和连接池之间的关系

共享内存 (SHM) 中的 OpenSSL 会话池可能吗? [关闭]

会话在选项卡之间共享

超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。