AGGIORNAMENTO: https://requests.readthedocs.io/en/master/user/advanced/#timeouts
Nella nuova versione di requests
:
Se si specifica un singolo valore per il timeout, in questo modo:
r = requests.get('https://github.com', timeout=5)
Il valore di timeout verrà applicato sia connect
al read
timeout che al timeout. Specificare una tupla se si desidera impostare i valori separatamente:
r = requests.get('https://github.com', timeout=(3.05, 27))
Se il server remoto è molto lento, puoi dire alle Richieste di attendere per sempre una risposta, passando Nessuno come valore di timeout e quindi recuperando una tazza di caffè.
r = requests.get('https://github.com', timeout=None)
La mia vecchia risposta (probabilmente obsoleta) (che è stata pubblicata molto tempo fa):
Esistono altri modi per superare questo problema:
1. Utilizzare la TimeoutSauce
classe interna
Da: 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
Questo codice dovrebbe indurci a impostare il timeout di lettura uguale al timeout di connessione, che è il valore di timeout che passi sulla tua chiamata Session.get (). (Nota che non ho ancora testato questo codice, quindi potrebbe essere necessario un rapido debug, l'ho appena scritto direttamente nella finestra di GitHub.)
2. Utilizzare un fork di richieste da kevinburke: https://github.com/kevinburke/requests/tree/connect-timeout
Dalla sua documentazione: https://github.com/kevinburke/requests/blob/connect-timeout/docs/user/advanced.rst
Se si specifica un singolo valore per il timeout, in questo modo:
r = requests.get('https://github.com', timeout=5)
Il valore di timeout verrà applicato sia al timeout di connessione sia a quello di lettura. Specificare una tupla se si desidera impostare i valori separatamente:
r = requests.get('https://github.com', timeout=(3.05, 27))
kevinburke ha richiesto che venga unito al progetto delle richieste principali, ma non è stato ancora accettato.