AKTUALIZACJA: https://requests.readthedocs.io/en/master/user/advanced/#timeouts
W nowej wersji requests
:
Jeśli określisz jedną wartość limitu czasu, na przykład:
r = requests.get('https://github.com', timeout=5)
Wartość limitu czasu zostanie zastosowana zarówno connect
do read
limitów czasu, jak i do limitów czasu. Określ krotkę, jeśli chcesz ustawić wartości osobno:
r = requests.get('https://github.com', timeout=(3.05, 27))
Jeśli serwer zdalny działa bardzo wolno, możesz nakazać Requests, aby czekały wiecznie na odpowiedź, przekazując None jako wartość limitu czasu, a następnie pobierając filiżankę kawy.
r = requests.get('https://github.com', timeout=None)
Moja stara (prawdopodobnie nieaktualna) odpowiedź (która została opublikowana dawno temu):
Istnieją inne sposoby rozwiązania tego problemu:
1. Użyj TimeoutSauce
klasy wewnętrznej
Od: 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
Ten kod powinien spowodować, że ustawimy limit czasu odczytu jako równy limitowi czasu połączenia, który jest wartością limitu czasu, którą przekazujesz w wywołaniu Session.get (). (Zauważ, że tak naprawdę nie testowałem tego kodu, więc może wymagać szybkiego debugowania, po prostu napisałem go bezpośrednio w oknie GitHub.)
2. Użyj rozwidlenia żądań z kevinburke: https://github.com/kevinburke/requests/tree/connect-timeout
Z jego dokumentacji: https://github.com/kevinburke/requests/blob/connect-timeout/docs/user/advanced.rst
Jeśli określisz jedną wartość limitu czasu, na przykład:
r = requests.get('https://github.com', timeout=5)
Wartość limitu czasu zostanie zastosowana zarówno do połączenia, jak i do limitów czasu odczytu. Określ krotkę, jeśli chcesz ustawić wartości osobno:
r = requests.get('https://github.com', timeout=(3.05, 27))
kevinburke zażądał scalenia go z głównym projektem żądań, ale nie został jeszcze zaakceptowany.