urllib3 connectionpool-连接池已满,正在丢弃连接

时间:2018-12-13 15:41:22

标签: python connection pool urllib3

看到了

urllib3.connectionpool WARNING - Connection pool is full, discarding connection

表示我正在有效地丢失数据(由于失去连接)

这是否意味着连接已断开(因为池已满);但是,当连接池可用时,稍后将重试相同的连接吗?

2 个答案:

答案 0 :(得分:2)

  

这是否意味着连接已断开(因为池已满);但是,当连接池可用时,稍后将重试相同的连接吗?

^这是正确的解释。如果您认为该消息的措词更清晰,请针对该建议提出一个问题!

因为urllib3 PoolManager重用了连接,所以它将限制在任何给定时间每个主机允许多少个连接,以避免累积太多未使用的套接字。如果您依赖于并发,最好将大小增加到正在使用的线程数,以便每个线程有效地获得自己的连接。

此处有更多详细信息:https://urllib3.readthedocs.io/en/latest/advanced-usage.html#customizing-pool-behavior

答案 1 :(得分:1)

根据documentation on Customizing Pool Behavior您的解释都不正确:

<块引用>

默认情况下,如果发出新请求并且池中没有空闲连接,则将创建一个新连接。但是,如果存在超过 maxsize 的连接,则不会保存此连接。这意味着 ma​​xsize 不确定可以对特定主机打开的最大连接数,只是确定池中保留的最大连接数。

(我的重点)

因此连接没有中止以便稍后重试。它们按照要求立即制作,并返回结果。然后,完成后,那些“额外”的连接被丢弃,即它们没有保留在池中供以后重用。

例如,如果您的 maxsize 为 10(通过 urllib3 使用 requests 时的默认设置),并且您并行启动 50 个请求,那么这 50 个连接将同时执行,完成后,池中将只剩下 10 个,而 40 个将被丢弃(并发出警告)。