Ich wollte ein Standard-Timeout, das einfach zu einer Reihe von Codes hinzugefügt werden kann (vorausgesetzt, das Timeout löst Ihr Problem).
Dies ist die Lösung, die ich von einem Ticket erhalten habe, das an das Repository für Anfragen gesendet wurde.
Gutschrift: https://github.com/kennethreitz/requests/issues/2011#issuecomment-477784399
Die Lösung sind die letzten paar Zeilen hier, aber ich zeige mehr Code für einen besseren Kontext. Ich verwende gerne eine Sitzung für Wiederholungsverhalten.
import requests
import functools
from requests.adapters import HTTPAdapter,Retry
def requests_retry_session(
retries=10,
backoff_factor=2,
status_forcelist=(500, 502, 503, 504),
session=None,
) -> requests.Session:
session = session or requests.Session()
retry = Retry(
total=retries,
read=retries,
connect=retries,
backoff_factor=backoff_factor,
status_forcelist=status_forcelist,
)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)
# set default timeout
for method in ('get', 'options', 'head', 'post', 'put', 'patch', 'delete'):
setattr(session, method, functools.partial(getattr(session, method), timeout=30))
return session
dann kannst du so etwas machen:
requests_session = requests_retry_session()
r = requests_session.get(url=url,...