Locust使用的是Python requests,而Python requests使用的是urllib3,而urllib3使用的是socket.getaddrinfo。根据这个SO线程的说法(假设您的测试机器运行Linux),socket.getaddrinfo禁用了DNS缓存。
python-requests
在每次连接时都会进行 DNS 查询。
要禁用此功能,您可以使用 dns 缓存
。
现在,您可以使用 systemctl enable systemd-resolved
启用 systemd-resolved
。
更多信息 - https://www.freedesktop.org/software/systemd/man/systemd-resolved.service.html
是的,Python requests
库在每次请求时执行 DNS 查询;
然而,您可以通过使用 requests-cache 来改善这种行为。
requests-cache 是一个持久化的 HTTP 缓存,它提供了一种简单的方式来提高使用 Python requests 库的性能。
使用它非常简单,只需 1 分钟、2 行代码,您就可以开始使用了。
import requests
import requests_cache
requests_cache.install_cache('my_simple_cache')
您随后的 Python requests
调用现在应该自动使用缓存。如果您希望,还有更多细粒度的选项可供选择,例如自定义过期时间等。
(这解决了我在尝试批量处理某个东西时遇到的问题,突然在调用达到 10K 后停止工作,不是因为服务不可用,而是因为 DNS 请求被我的内部网络 DNS 服务器拒绝。)
- sp1111
socket.getaddrinfo
,根据另一个 SO 问题上的这个 答案,应该使用您正在使用的操作系统的getaddrinfo
。因此,它应该根据每个后续请求到相同主机名的操作系统缓存结果。 - Cory Shay