python 使用urllib3库的连接生存期

3pvhb19x  于 2023-04-04  发布在  Python
关注(0)|答案(1)|浏览(135)

我正在使用Locust进行负载测试,并尝试实现连接生命周期,以便在连接池中的连接在连接创建后经过一定时间后在客户端关闭。此功能存在于C#中的PooledConnectionLifetime
我无法使用Locust使用的连接库urllib3复制连接生命周期功能。我有一个使用HttpUser的客户端脚本。在让HttpUser使用PoolManager子类后,我没有成功。子类使用HttpConnection和HttpsConnection子类,这些子类已经覆盖了试图实现连接生命周期功能的方法。看起来甚至没有使用子类,因为它们在Locust客户端运行时不生成任何日志。
有没有一种方法可以将连接生存期功能添加到urllib3,或者其他可以使用的解决方案?
编辑:我尝试利用conn.timeout.get_connect_duration()方法来实现该功能。我不确定start_connect()是否仅在第一次使用_make_request时调用,还是每次从池中取出时调用。

cig3rfwq

cig3rfwq1#

urllib3有一个Timeout对象,可以将其分配给连接池以强制关闭长时间运行的连接。

示例

  • 官方文档示例 *
timeout = Timeout(connect=2.0, read=7.0)
http = PoolManager(timeout=timeout)
response = http.request('GET', 'http://example.com/')

Locust实现

locust源代码中可以看出,HttpUser有一个可选参数pool_manager。该参数默认为None,但可以根据urllib3的定义分配一个PoolManager对象。

文档

*urllib3.util.Timeout

相关问题