HOWTO · Python
Python でリクエストの最大再試行回数を設定する
このチュートリアルでは、Python でリクエストの max_retries を設定する方法を示します。
このチュートリアルでは、最大再試行回数を超えたというエラーが発生する理由と、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の場合、さらに再試行が要求されます。 再試行をさらに細かく制御するために、再試行を変更できます。