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_factor
が0.01
に設定されている場合、sleep()
は0.0s
、0.2s
、0.4s
、… 再試行の間にスリープします。 バックオフはデフォルトでは非アクティブです (0
に設定)。返されたステータス コードが
500
、502
、503
、または504
の場合、さらに再試行が要求されます。 再試行をさらに細かく制御するために、再試行を変更できます。
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