Python でリクエストの最大再試行回数を設定する

Haider Ali 2023年10月10日
Python でリクエストの最大再試行回数を設定する

このチュートリアルでは、最大再試行回数を超えたというエラーが発生する理由と、Python で要求に対して max_retries を設定する方法について説明します。 また、サーバーの負荷が原因でこのエラーが発生した場合のヒントも提供します。

Requests Error に max_retries を設定する、Python での原因と解決策

Python でリクエストに max_retries を設定する方法を確認する前に、まずいくつかの問題に対処しましょう。

  • まず、このエラーは URL が正しくない場合に発生する可能性があります。 そのため、リクエストしている URL が有効かどうかを確認する必要があります。
  • このエラーは、インターネット接続が原因で発生することもあるため、そのような問題をすべてクリアしていることを確認してください。
  • サーバーの過負荷がある場合にも、このエラーが発生します。 サーバーがビジー状態の場合、このタイプのエラーが発生する可能性があります。

ここで、URL を要求するための再試行回数を増やす現象が役に立ちます。 それでは、それを行う方法を学びましょう。 しかし、まず、次のコードを見てください。

コード例:

import requests

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

これは、Python で URL 要求の再試行回数を増やす方法ですが、サーバーの負荷が原因でこのエラーが発生する場合は、次のヒントを使用できます。

注: 次のコマンドを使用して、Python に requests モジュールをインストールする必要があります。

python -m pip install requests

Python でリクエストのセット max_retries を取り除くためのヒント

サーバーの負荷が原因でこのエラーが発生する場合は、次のヒントのいずれかを使用できます。

  • keep_alive を無効にする

    セッションの keep_alive 機能を無効にすることができます。 次のコードは、その方法を説明しています。

    request_session = requests.session()
    # disable keep_alive
    request_session.keep_alive = False
    request_session.get(your_url)
    
  • タイムアウト を使用する

    サーバーが過負荷、ビジー、または場所から遠く離れている場合、これが同じエラーが発生する理由になる可能性があります. これを避けるために、応答時間を増やすことができます。

    サーバーからの POST リクエストと GET リクエストの両方で実行できます。 たとえば、次のコードを見てください。

    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)
    

    timeout パラメータでタプルを使用することもできます。 最初のパラメーターはビルド時間を増加させ、2 番目のパラメーターは応答時間を増加させます。 コード例を以下に示します。

    req = requests.get(your_url, timeout=(3, 6))
    
  • backoff_factor (遅延/スリープ) を設定します

    backoff_factor は、ネットワーク接続を最初に設定するためにリクエストで使用される urllib3 引数です。

    backoff_factor を設定して、各試行の試行回数とスリープ時間を増やすこともできます。

    このエラーの発生を回避します。 これにより、コードの一部を停止し、サーバーの応答を受信するまで待機させます。

    次の例は、backoff_factor がサービス リクエストに失敗するたびにサービス リクエストを遅らせる方法を示しています。

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

    urllib3 ドキュメント によると、backoff_factor は、ライブラリが再試行間のスリープ間隔を決定するために使用する基本値です。

    たとえば、接続試行が失敗するたびに、urllib3{backoff_factor} * (2 (合計再試行回数 - 1)) 秒間スリープします。

    たとえば、backoff_factor0.01 に設定されている場合、sleep()0.0s0.2s0.4s、… 再試行の間にスリープします。 バックオフはデフォルトでは非アクティブです (0 に設定)。

    返されたステータス コードが 500502503、または 504 の場合、さらに再試行が要求されます。 再試行をさらに細かく制御するために、再試行を変更できます。

著者: 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

関連記事 - Python Requests