Python запрашивает тайм-аут не работает должным образом - PullRequest
0 голосов
/ 10 ноября 2018

Я использую следующий код для проверки среднего времени ответа, потому что заметил, что оно очень медленное:

            t1 = time.time()
            response = requests.get(url, timeout=10, headers=headers)
            t2 = time.time()
            reqtimes += t2 - t1
            reqamount += 1
            print("Average response time:" + str(reqtimes/reqamount))

Когда я печатаю среднее время отклика после подключения примерно к 1000 различным сайтам, оно говорит мне, что среднее время отклика составляет 70 секунд. Зачем? мой тайм-аут установлен на 10!

1 Ответ

0 голосов
/ 10 ноября 2018

timeout - это максимальный период времени, в течение которого может быть получен любой ответ от сервера *. Если время ожидания составляет 10 секунд, и сервер возвращает 100-байтовый файл, по одному байту за каждые 9 секунд, то время ожидания не истечет ... но у вас будет очень долгое ожидание завершения ответа (общее прошедшее время составит 900 секунд). Например: даже для одного запроса со временем ожидания 10 секунд среднее время ответа будет 15 минут).

Стоит отметить, что у объектов ответа уже есть атрибут .elapsed, который дает вам объект timedelta, который вы можете использовать, чтобы избежать использования time.time() и выполнять вычисления самостоятельно.

* Перефразировано с http://docs.python -requests.org / ru / master / user / quickstart / # timeouts :

тайм-аут не является ограничением по времени загрузки всего ответа; скорее, возникает исключение, если сервер не выдал ответ в течение секунд ожидания (точнее, если в базовом сокете не было получено ни одного байта в течение секунд ожидания). Если время ожидания не указано явно, запросы не прерываются.

...