Establecer reintentos máximos para solicitudes en Python

Haider Ali 10 octubre 2023
Establecer reintentos máximos para solicitudes en Python

Este tutorial describe por qué recibimos un error que dice que se excedieron los reintentos máximos y cómo podemos configurar max_retries para las solicitudes en Python. También nos brinda consejos si una carga en el servidor provoca este error.

Establezca max_retries para el error de solicitudes, sus causas y soluciones en Python

Antes de seguir adelante y ver cómo podemos configurar max_retries para solicitudes en Python, abordemos primero algunos de los problemas.

  • Primero, este error puede ocurrir si tu URL no es correcta. Por lo tanto, debe verificar si la URL que está solicitando es válida o no.
  • Este error también puede ocurrir debido a la conexión a Internet, así que asegúrese de no tener ningún problema de este tipo.
  • También recibimos este error cuando hay una sobrecarga del servidor. Cuando los servidores están ocupados, puede encontrar este tipo de error.

Ahí es donde entra en juego el fenómeno de aumentar el número de reintentos para solicitar la URL. Entonces, aprendamos cómo puedes hacer eso. Pero, primero, eche un vistazo al siguiente código.

Código de ejemplo:

import requests

# increass retries number
retries = 4  # enter the number of retires you want to increase
requests.adapters.DEFAULT_RETRIES = retries

Así es como puede aumentar la cantidad de reintentos para una solicitud de URL en Python, pero si recibe este error debido a una carga en el servidor, puede usar los siguientes consejos.

Nota: Debe instalar el módulo de solicitudes en su Python usando el siguiente comando:

python -m pip install requests

Consejos para deshacerse del conjunto max_retries para solicitudes en Python

Puede usar cualquiera de los siguientes consejos si la carga en el servidor provoca este error.

  • Deshabilitar keep_alive

    Puede deshabilitar la funcionalidad keep_alive de la sesión. El siguiente fragmento de código explica cómo puede hacerlo.

    request_session = requests.session()
    # disable keep_alive
    request_session.keep_alive = False
    request_session.get(your_url)
    
  • Usar tiempo de espera

    Cuando el servidor está sobrecargado, ocupado o lejos de la ubicación, esto puede convertirse en la razón por la que recibe el mismo error. Para evitar esto, puede aumentar el tiempo de respuesta.

    Puede hacerlo con las solicitudes POST y GET del servidor. Por ejemplo, eche un vistazo al siguiente código.

    import requests
    
    # the time in seconds in this example is increasing time by 5
    req = requests.get(your_url, timeout=5)
    req = requests.post(your_url, timeout=5)
    

    También puedes usar la tupla en los parámetros timeout. El primer parámetro aumentará el tiempo de construcción y el segundo parámetro aumentará el tiempo de respuesta. El ejemplo de código se da a continuación.

    req = requests.get(your_url, timeout=(3, 6))
    
  • Establecer un backoff_factor (Retraso/Sueño)

    backoff_factor es un argumento urllib3 utilizado por las solicitudes para configurar inicialmente una conexión de red.

    También puede configurar el factor de retroceso para aumentar el número de intentos y el tiempo de suspensión de cada intento.

    Evitará obtener este error. Con esto, está deteniendo la pieza de código y haciéndola esperar hasta que reciba la respuesta del servidor.

    Aquí hay una ilustración de cómo backoff_factor puede retrasar las solicitudes de servicio cada vez que falla una.

    # you can set a backoff factor means delay/sleep time in each retry
    import requests
    from requests.adapters import HTTPAdapter
    from requests.packages.urllib3.util.retry import Retry
    
    # initailize the request session
    request_session = requests.Session()
    # initailizing retry object
    # you can increase the number of total retires and sleep time of each retry
    retries = Retry(total=3, backoff_factor=1)
    adapter = HTTPAdapter(max_retries=retry)
    request_session.mount("http://", adapter)
    request_session.get(your_url)
    

    De acuerdo con la documentación de urllib3, backoff_factor es un valor base que la biblioteca usa para determinar el intervalo de suspensión entre reintentos.

    Por ejemplo, después de cada intento fallido de conexión, urllib3 dormirá durante {backoff_factor} * (2 (número total de reintentos - 1)) segundos.

    Por ejemplo, sleep() dormirá durante 0.0s, 0.2s, 0.4s,… entre reintentos si el backoff_factor está configurado en 0.01. Backoff está inactivo por defecto (establecido en 0).

    Si el código de estado devuelto es 500, 502, 503 o 504, solicitará adicionalmente un reintento. Para tener un control aún más preciso sobre los reintentos, puede modificar el reintento.

Autor: Haider Ali
Haider Ali avatar Haider Ali avatar

Haider specializes in technical writing. He has a solid background in computer science that allows him to create engaging, original, and compelling technical tutorials. In his free time, he enjoys adding new skills to his repertoire and watching Netflix.

LinkedIn

Artículo relacionado - Python Requests