Mic*_*mza 5 python tcp http keep-alive urllib3
有没有办法告诉 Python urllib3 在一段时间后不要重用空闲连接,而是关闭它们?
查看https://urllib3.readthedocs.io/en/latest/reference/index.html#module-urllib3.connectionpool似乎没有显示任何相关内容。
记住:
\n\n\n\n\n连接池是维护的数据库连接的缓存,以便在将来需要向数据库发出请求时可以“重用”连接。
\n
你可以通过多种方式做到这一点(我猜):
\n\n如果一次失败,这会中断您的连接。设置它:
\n\nimport requests\ns = requests.Session()\na = requests.adapters.HTTPAdapter(max_retries=1) # is zero for default\ns.mount(\'http://\', a)\nRun Code Online (Sandbox Code Playgroud)\n\n“pool_connections”是要保留的主机池的数量。例如,如果您要连接到 100 个不同的主机,并且pool_connections=10,则仅会重新使用最新的 10 个主机的连接。要设置它:
s = requests.Session()\ns.mount(\'https://\', HTTPAdapter(pool_connections=1))\ns.get(\'https://www.example.com\')\nRun Code Online (Sandbox Code Playgroud)\n\n这将停止池的重用。
\n\n仅当您在多线程环境中使用 Session 时才需要关心这一点。设置它:
\n\ns = requests.Session()\ns.mount(\'https://\', HTTPAdapter(pool_connections=1, pool_maxsize=1))\nRun Code Online (Sandbox Code Playgroud)\n\n他 :class: class 保留了一个单独的 :class:实例~connectionpool.ConnectionPool池。~connection.HTTPConnection这些连接在单个请求期间使用,并在请求完成时返回到池中。默认情况下,仅保存一个连接以供重复使用。设置它(默认情况下):
from urllib3 import HTTPConnectionPool\npool = HTTPConnectionPool(\'www.example.com\', maxsize=0) #likely to slow you down cuz it never stores the pools\nRun Code Online (Sandbox Code Playgroud)\n\nmaxsize \xe2\x80\x93 要保存的可重用的连接数。多于 1 在多线程情况下很有用。
\n\nPoolManager 使用最近最少使用 (LRU) 策略来丢弃旧池。也就是说,如果将 PoolManager 设置num_pools为 10,那么在向 11 个或更多不同主机发出请求后,最近最少使用的池最终将被清理。所以要做到这一点:
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/\')\nRun Code Online (Sandbox Code Playgroud)\n\n另外,文档说:
\n\n\n\n\n陈旧池的清理不会立即发生。
\n
因此,使用最近使用的容器(文档仅包含一行)。
\n\n笔记:
\n\n\n\n\n如果 PoolManager 影响所有连接的池,则设置参数。
\n
希望这对您有帮助。在此处获取高级使用文档。
\n| 归档时间: |
|
| 查看次数: |
1579 次 |
| 最近记录: |