Python urllib3:一段时间后关闭空闲连接

Mic*_*mza 5 python tcp http keep-alive urllib3

有没有办法告诉 Python urllib3 在一段时间后不要重用空闲连接,而是关闭它们?

查看https://urllib3.readthedocs.io/en/latest/reference/index.html#module-urllib3.connectionpool似乎没有显示任何相关内容。

Jos*_*hua 3

记住:

\n\n
\n

连接池是维护的数据库连接的缓存,以便在将来需要向数据库发出请求时可以“重用”连接。

\n
\n\n

你可以通过多种方式做到这一点(我猜):

\n\n
    \n
  • 将重试次数设置为 1。
  • \n
\n\n

如果一次失败,这会中断您的连接。设置它:

\n\n
import requests\ns = requests.Session()\na = requests.adapters.HTTPAdapter(max_retries=1) # is zero for default\ns.mount(\'http://\', a)\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n
    \n
  • 更改池连接。
  • \n
\n\n

“pool_connections”是要保留的主机池的数量。例如,如果您要连接到 100 个不同的主机,并且pool_connections=10,则仅会重新使用最新的 10 个主机的连接。要设置它:

\n\n
s = requests.Session()\ns.mount(\'https://\', HTTPAdapter(pool_connections=1))\ns.get(\'https://www.example.com\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

这将停止池的重用。

\n\n
\n\n
    \n
  • 池最大尺寸
  • \n
\n\n

仅当您在多线程环境中使用 Session 时才需要关心这一点。设置它:

\n\n
s = requests.Session()\ns.mount(\'https://\', HTTPAdapter(pool_connections=1, pool_maxsize=1))\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n
    \n
  • 配置最大尺寸
  • \n
\n\n

他 :class: class 保留了一个单独的 :class:实例~connectionpool.ConnectionPool池。~connection.HTTPConnection这些连接在单个请求期间使用,并在请求完成时返回到池中。默认情况下,仅保存一个连接以供重复使用。设置它(默认情况下):

\n\n
from urllib3 import HTTPConnectionPool\npool = HTTPConnectionPool(\'www.example.com\', maxsize=0) #likely to slow you down cuz it never stores the pools\n
Run Code Online (Sandbox Code Playgroud)\n\n

maxsize \xe2\x80\x93 要保存的可重用的连接数。多于 1 在多线程情况下很有用。

\n\n
\n\n
    \n
  • 让泳池经理来做吧!
  • \n
\n\n

PoolManager 使用最近最少使用 (LRU) 策略来丢弃旧池。也就是说,如果将 PoolManager 设置num_pools为 10,那么在向 11 个或更多不同主机发出请求后,最近最少使用的池最终将被清理。所以要做到这一点:

\n\n
from urllib3 import PoolManager\nmanager = PoolManager(1) # not the manager cleans up pools used for one time\nr = manager.request(\'GET\', \'http://www.example.com/\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

另外,文档说:

\n\n
\n

陈旧池的清理不会立即发生。

\n
\n\n

因此,使用最近使用的容器(文档仅包含一行)。

\n\n

笔记:

\n\n
\n

如果 PoolManager 影响所有连接的池,则设置参数。

\n
\n\n
\n\n

希望这对您有帮助。在此处获取高级使用文档。

\n