从
aiohttp
文件:
[安]
aiohttp.ClientSession
]默认情况下,封装连接池(连接器实例)并支持keepalives。
除非在应用程序的生命周期内连接到大量未知数量的不同服务器,否则建议在应用程序的生命周期内使用单个会话,以从连接池中获益。
我几乎总是习惯保持单身
ClientSession
实例(已启用Cookie&自定义连接器/适配器*),用于任何大小或容器的URL,无论这些URL有多异构或有多少个。我想知道这种方法是否有缺点。
我希望对“大量未知数量的不同服务器”在实践中的构成有一个更精细的上下文定义。对于下面介绍的这种情况,最佳做法是什么?应该
客户会话
通常情况下,我有“批”的端点;每批的netloc是同质的,但批之间的netloc是不同的。例如
urls = {
'https://aiohttp.readthedocs.io/en/stable/index.html',
'https://aiohttp.readthedocs.io/en/stable/client_reference.html',
'https://aiohttp.readthedocs.io/en/stable/web_advanced.html#aiohttp-web-middlewares',
'https://www.thesaurus.com/',
'https://www.thesaurus.com/browse/encapsulate',
'https://www.thesaurus.com/browse/connection?s=t',
'https://httpbin.org/',
'https://httpbin.org/#/HTTP_Methods',
'https://httpbin.org/status/200'
}
*我现在所做的是通过将连接器实例传递给任何一个主机来限制到任何一个主机的开放连接
客户会话
aiohttp.TCPConnector(limit_per_host=10)
.
**具体来说,
{'www.thesaurus.com', 'aiohttp.readthedocs.io', 'httpbin.org'}
即
set(urllib.parse.urlsplit(u).netloc for u in urls)