Я испытывал слишком медленное выполнение запросов Python на некоторых машинах и конкретном пользователе, в то время как другие инструменты (например, завитки) довольно быстры. Странно то, что если запустить сценарий в качестве другого пользователя, тогда он работает так, как ожидалось. Если я запустил сценарий на своей машине (как в Windows, так и в Linux), то он будет работать так же, как ожидалось. Проблемными машинами являются серверы Windows 2008 на Hyper-V. Обычно я использую запрос POST, но затрагиваются как POST, так и GET. Для демонстрации я создал простой скрипт с запросом GET. Все запросы занимают около 4,8 с, но это должно занимать около 0,03 (виртуальные машины не так сильны).Модуль запросов на Python очень медленный на конкретной машине
[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.523s перед открытием соединения, пока модуль 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 #1 и Python requests are slower thann curl, но это не относится к моей проблеме.
Попробуйте профилировать его: 'python -m cProfile your_script.py'. См. [Этот ответ] (http://stackoverflow.com/a/582337/1084416). –
Это может быть связано с [pyOpenSSLl issue # 137] (https://github.com/pyca/pyopenssl/issues/137). Чтобы подтвердить или исключить это, не могли бы вы проверить, является ли «python -c» импорт OpenSSL «' уже медленным или просто фактическим запросом? (Также см. ['Request' # 2372] (https://github.com/kennethreitz/requests/issues/2372)) –
Спасибо за ответ, но я не думаю, что это моя проблема, потому что 1) запросы хорошо работают при запуске как другой пользователь или на моем ноутбуке. 2) Каждый HTTP-запрос занимает почти 5 секунд, даже если в одном методе есть несколько последовательных запросов. Только первый запрос будет медленнее, если проблема будет вызвана проблемой импорта, не так ли? – Sobik