Quería un tiempo de espera predeterminado agregado fácilmente a un montón de código (asumiendo que el tiempo de espera resuelve su problema)
Esta es la solución que recogí de un ticket enviado al repositorio de solicitudes.
crédito: https://github.com/kennethreitz/requests/issues/2011#issuecomment-477784399
La solución son las últimas dos líneas aquí, pero muestro más código para un mejor contexto. Me gusta usar una sesión para reintentar el comportamiento.
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
entonces puedes hacer algo como esto:
requests_session = requests_retry_session()
r = requests_session.get(url=url,...