Je voulais un délai d'attente par défaut facile à ajouter à un tas de code (en supposant que le délai d'attente résout votre problème).
C'est la solution que j'ai récupérée d'un ticket soumis au dépôt pour les demandes.
crédit : https://github.com/kennethreitz/requests/issues/2011#issuecomment-477784399
La solution se trouve dans les deux dernières lignes ici, mais je montre plus de code pour un meilleur contexte. J'aime utiliser une session pour le comportement de relance.
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
alors vous pouvez faire quelque chose comme ça :
requests_session = requests_retry_session()
r = requests_session.get(url=url,...