Maximale Wiederholungsversuche für Anfragen in Python festlegen

Haider Ali 10 Oktober 2023
Maximale Wiederholungsversuche für Anfragen in Python festlegen

Dieses Tutorial beschreibt, warum wir eine Fehlermeldung erhalten, die besagt, dass die maximale Wiederholungszahl überschritten wurde, und wie wir max_retries für Anfragen in Python festlegen können. Es gibt uns auch Tipps, wenn eine Last auf dem Server diesen Fehler verursacht.

Setzen Sie max_retries für Requests Error, Its Causes & Solutions in Python

Bevor wir weitermachen und sehen, wie wir max_retries für Anfragen in Python einstellen können, wollen wir zuerst einige der Probleme ansprechen.

  • Erstens kann dieser Fehler auftreten, wenn Ihre URL nicht korrekt ist. Sie müssen also überprüfen, ob die von Ihnen angeforderte URL gültig ist oder nicht.
  • Dieser Fehler kann auch aufgrund der Internetverbindung auftreten, stellen Sie also sicher, dass Sie alle derartigen Probleme vermeiden.
  • Wir erhalten diesen Fehler auch, wenn eine Serverüberlastung vorliegt. Wenn die Server ausgelastet sind, kann diese Art von Fehler auftreten.

Hier hilft uns das Phänomen der Erhöhung der Anzahl der Wiederholungsversuche zum Anfordern der URL. Lassen Sie uns also lernen, wie Sie das tun können. Aber werfen Sie zuerst einen Blick auf den folgenden Code.

Beispielcode:

import requests

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

So können Sie die Anzahl der Wiederholungen für eine URL-Anfrage in Python erhöhen, aber wenn Sie diesen Fehler aufgrund einer Last auf dem Server erhalten, können Sie die folgenden Tipps verwenden.

Hinweis: Sie müssen das Modul requests in Ihrem Python mit dem folgenden Befehl installieren:

python -m pip install requests

Tipps zum Loswerden des Satzes max_retries für Anfragen in Python

Sie können einen der folgenden Tipps verwenden, wenn die Auslastung des Servers diesen Fehler verursacht.

  • keep_alive deaktivieren

    Sie können die keep_alive-Funktionalität der Sitzung deaktivieren. Der folgende Codeabschnitt erklärt, wie Sie das tun können.

    request_session = requests.session()
    # disable keep_alive
    request_session.keep_alive = False
    request_session.get(your_url)
    
  • Verwenden Sie Zeitüberschreitung

    Wenn der Server überlastet, ausgelastet oder weit vom Standort entfernt ist, kann dies der Grund dafür sein, dass Sie denselben Fehler erhalten. Um dies zu vermeiden, können Sie die Reaktionszeit verlängern.

    Sie können dies sowohl mit den POST- als auch mit den GET-Anforderungen des Servers tun. Sehen Sie sich beispielsweise den folgenden Code an.

    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)
    

    Sie können das Tupel auch in den timeout-Parametern verwenden. Der erste Parameter erhöht die Aufbauzeit und der zweite Parameter erhöht die Reaktionszeit. Das Codebeispiel ist unten angegeben.

    req = requests.get(your_url, timeout=(3, 6))
    
  • Setzen Sie einen backoff_factor (Delay/Sleep)

    backoff_factor ist ein urllib3-Argument, das von Anfragen verwendet wird, um anfänglich eine Netzwerkverbindung aufzubauen.

    Sie können auch den backoff_factor einrichten, um die Anzahl der Versuche und die Ruhezeit jedes Versuchs zu erhöhen.

    Dadurch wird vermieden, dass dieser Fehler auftritt. Damit stoppen Sie den Code und lassen ihn warten, bis er die Antwort des Servers erhält.

    Hier ist eine Veranschaulichung, wie backoff_factor Dienstanfragen verzögern kann, wenn eine fehlschlägt.

    # 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)
    

    Laut der urllib3-Dokumentation ist backoff_factor ein Basiswert, den die Bibliothek verwendet, um das Ruheintervall zwischen Wiederholungen zu bestimmen.

    Zum Beispiel wird urllib3 nach jedem erfolglosen Verbindungsversuch für {backoff_factor} * (2 (Anzahl der Gesamtversuche - 1)) Sekunden schlafen.

    Zum Beispiel wird sleep() für 0.0s, 0.2s, 0.4s, … zwischen den Wiederholungen schlafen, wenn der backoff_factor auf 0.01 gesetzt ist. Backoff ist standardmäßig inaktiv (auf 0 gesetzt).

    Wenn der zurückgegebene Statuscode 500, 502, 503 oder 504 ist, wird zusätzlich eine Wiederholung verlangt. Um die Wiederholungen noch genauer steuern zu können, können Sie die Wiederholungen ändern.

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

Verwandter Artikel - Python Requests