Сообщить об ошибке.

Установка timeout для модуля requests в Python

Установка максимально время ожидания ответа сервера

Для большинства запросов к внешним серверам должен быть установлен тайм-аут на случай, если сервер не отвечает своевременно. По умолчанию для запросов не истекает время ожидания, если явно не задано значение времени ожидания. Без тайм-аута, код может зависнуть на несколько минут или больше.

Тайм-аут подключения - это количество секунд, в течение которых клиент будет ждать, пока установится соединение с удаленным компьютером (соответствует вызову .connect()) в сокете. Рекомендуется устанавливать время ожидания подключения немного больше, чем кратное трем, что является окном повторной передачи TCP-пакетов по умолчанию.

Модуль requests позволяет указывать максимально время ожидания ответа сервера через аргумент timeout.

>>> import requests
>>> requests.get('https://github.com/', timeout=0.001)
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# ...
# requests.exceptions.Timeout: HTTPConnectionPool(host='github.com', port=443)

Примечание: аргумент timeout (тайм-аут) - это не ограничение по времени на загрузку всего ответа сервера. Исключение возникает, если сервер не отправил ответ за время timeout в секундах (точнее, если не было получено каких либо байтов на базовый сокет в течение секунд, указанных в timeout). Если тайм-аут явно не указан, то запрос не прерывается и модуль будет ждать ответа до победного конца.

Как только клиент подключится к серверу и отправит HTTP-запрос, тайм-аут чтения - это количество секунд, в течение которых клиент будет ждать ответа от сервера. (В частности, это количество секунд, которое клиент будет ждать между байтами, отправленными с сервера. В 99,9% случаев это время до того, как сервер отправит первый байт).

Если задается одно значение для таймаута, например:

resp = requests.get('https://github.com', timeout=5)

Значение таймаута будет применяться как к таймаутам подключения, так и к таймаутам чтения. Для того, что бы установить значения таймаутов отдельно, необходимо указать кортеж:

resp = requests.get('https://github.com', timeout=(3.05, 27))

Если удаленный сервер работает очень медленно, то можно попросить библиотеку requests ждать ответа вечно, передав None в качестве значения аргумента timeout, а затем пойти пить кофе.