ОБНОВЛЕНИЕ: https://requests.readthedocs.io/en/master/user/advanced/#timeouts
В новой версии requests
:
Если вы указываете одно значение для тайм-аута, например так:
r = requests.get('https://github.com', timeout=5)
Значение тайм-аута будет применено как connect
к read
тайм-аутам, так и к тайм-аутам. Укажите кортеж, если вы хотите установить значения отдельно:
r = requests.get('https://github.com', timeout=(3.05, 27))
Если удаленный сервер работает очень медленно, вы можете попросить Requests вечно ждать ответа, передав None в качестве значения тайм-аута, а затем получив чашку кофе.
r = requests.get('https://github.com', timeout=None)
Мой старый (вероятно, устаревший) ответ (который был опубликован давно):
Есть и другие способы преодоления этой проблемы:
1. Используйте TimeoutSauce
внутренний класс
От: https://github.com/kennethreitz/requests/issues/1928#issuecomment-35811896
import requests from requests.adapters import TimeoutSauce
class MyTimeout(TimeoutSauce):
def __init__(self, *args, **kwargs):
connect = kwargs.get('connect', 5)
read = kwargs.get('read', connect)
super(MyTimeout, self).__init__(connect=connect, read=read)
requests.adapters.TimeoutSauce = MyTimeout
Этот код должен заставить нас установить тайм-аут чтения равным тайм-ауту соединения, который является значением тайм-аута, которое вы передаете при вызове Session.get (). (Обратите внимание, что я на самом деле не тестировал этот код, поэтому может потребоваться небольшая отладка, я просто написал его прямо в окне GitHub.)
2. Используйте форк запросов от kevinburke: https://github.com/kevinburke/requests/tree/connect-timeout
Из его документации: https://github.com/kevinburke/requests/blob/connect-timeout/docs/user/advanced.rst
Если вы указываете одно значение для тайм-аута, например так:
r = requests.get('https://github.com', timeout=5)
Значение тайм-аута будет применено как к тайм-аутам подключения, так и к тайм-ауту чтения. Укажите кортеж, если вы хотите установить значения отдельно:
r = requests.get('https://github.com', timeout=(3.05, 27))
kevinburke попросил включить его в проект основных запросов, но он еще не принят.