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

2024-04-20 02:47:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一些机器上和特定用户上遇到过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 ...")

作为有问题的用户登录时输出(不幸的是,我必须使用该用户)。请参阅请求模块在打开连接之前等待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 ...

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

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 ...

我读过Python requests are slow #1Python requests are slower thann curl,但它不适用于我的问题。


Tags: 用户infologapigettimeversionpackages
3条回答

可能有很多事情使请求变慢了。任何来自DNS查找、限制等的内容

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

logging.basicConfig() 
logging.getLogger().setLevel(logging.DEBUG)
requests_log = logging.getLogger("requests.packages.urllib3")
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True

对于阅读本文并在URL中使用localhost的人,我通过将其更改为127.0.0.1解决了这个问题。

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

我也有类似的问题。。。经过作者的大量调试,我们认为原因在于代理检测代码。。。

所以,一旦我实现了这个,它就解决了我的类似问题:requests: how to disable / bypass proxy

作者已经意识到这个问题,他们已经在工作中修复了,应该很快就会发布:https://github.com/kennethreitz/requests/pull/2992。。。

希望有帮助。。。

干杯 雅卡

相关问题 更多 >