Python请求模块在特定机器上非常慢

Sob*_*bik 5 python python-requests

我经历过在某些机器上和特定用户上执行 Python 请求的速度太慢,而其他工具(例如 curl)则非常快。奇怪的是,如果以另一个用户身份运行脚本,那么它会按预期运行。如果我在我的机器(Windows 或 Linux)上运行脚本,那么它也会按预期运行。有问题的机器是 Hyper-V 上的 Windows 2008 服务器。我通常使用 POST 请求,但 POST 和 GET 都受到影响。为了演示,我创建了带有 GET 请求的简单脚本。所有请求大约需要 4.8 秒,但应该需要大约 0.03 秒(虚拟机没有那么强大)。

[imports and logging configuration omitted]

log.info("Started ...")

start = time.time()
response1 = requests.get("http://10.50.30.216:8080/sps/api/version")
assert response1.status_code == codes.OK
log.info("Using requests: %.3fs" % (time.time() - start))

start = time.time()
conn = httplib.HTTPConnection("10.50.30.216:8080")
conn.request("GET", "/sps/api/version")
response2 = conn.getresponse()
assert response2.status == codes.OK
log.info("Using httplib: %.3fs" % (time.time() - start))

log.info("Finished ...")
Run Code Online (Sandbox Code Playgroud)

以有问题的用户身份登录时的输出(不幸的是,我必须使用该用户)。看到 requests 模块在打开连接之前等待 4.523 秒,而 httplib 模块立即继续。

2015-09-11 14:50:00,832 - INFO - myscript - Started ...
2015-09-11 14:50:05,355 - INFO - requests.packages.urllib3.connectionpool - Starting new HTTP connection (1): 10.50.30.216
2015-09-11 14:50:05,364 - DEBUG - requests.packages.urllib3.connectionpool - "GET /sps/api/version HTTP/1.1" 200 None
2015-09-11 14:50:05,365 - INFO - myscript - Using requests: 4.533s
2015-09-11 14:50:05,374 - INFO - myscript - Using httplib: 0.008s
2015-09-11 14:50:05,375 - INFO - myscript - Finished ...
Run Code Online (Sandbox Code Playgroud)

以其他用户身份登录时的输出。请注意,两个用户都具有管理员权限,但第二个用户只是临时的,并且只能在一台机器上使用,因此我无法通过切换用户来解决此问题。

2015-09-11 14:57:45,789 - INFO - myscript - Started ...
2015-09-11 14:57:45,799 - INFO - requests.packages.urllib3.connectionpool - Starting new HTTP connection (1): 10.50.30.216
2015-09-11 14:57:45,806 - DEBUG - requests.packages.urllib3.connectionpool - "GET /sps/api/version HTTP/1.1" 200 None
2015-09-11 14:57:45,809 - INFO - myscript - Using requests: 0.021s
2015-09-11 14:57:45,815 - INFO - myscript - Using httplib: 0.004s
2015-09-11 14:57:45,815 - INFO - myscript - Finished ...
Run Code Online (Sandbox Code Playgroud)

我读过Python 请求很慢 #1并且Python 请求比 curl 慢,但它不适用于我的问题。

Cas*_*sen 14

对于阅读本文并localhost在其 URL 中使用的任何人,我通过将其更改为127.0.0.1.

如果这解决了问题,则是 DNS 问题,而不是请求问题。


Cia*_*man 5

可能有很多事情会减慢请求的速度。任何来自 DNS 查找、限制等的操作。

尝试通过打开请求调试日志来获取更多信息

logging.basicConfig() 
logging.getLogger().setLevel(logging.DEBUG)
requests_log = logging.getLogger("requests.packages.urllib3")
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True
Run Code Online (Sandbox Code Playgroud)