1. ホーム
  2. パイソン

[解決済み】requests.requestにmax_retriesを設定することはできますか?

2022-04-17 12:23:53

質問

Pythonのリクエストモジュールはシンプルでエレガントなのですが、1つだけ悩ましいことがあります。 それは リクエスト.exception.ConnectionError のようなメッセージで

Max retries exceeded with url: ...

これは、リクエストが何度もデータへのアクセスを試みることができることを意味します。しかし、この可能性については、ドキュメントのどこにも一言も書かれていません。ソースコードを見ても、デフォルト(おそらく0)の値を変更できるような場所は見つかりませんでした。

では、何らかの方法でリクエストの最大再試行回数を設定することは可能でしょうか?

解決方法は?

それは、根本的な urllib3 ライブラリが再試行を行います。別の最大再試行回数を設定するには 代替トランスポートアダプタ :

from requests.adapters import HTTPAdapter

s = requests.Session()
s.mount('http://stackoverflow.com', HTTPAdapter(max_retries=5))

max_retries 引数は整数値または Retry() オブジェクト 後者では、どのような種類の失敗を再試行するかを細かく制御できます (整数値を Retry() 接続後のエラーは副作用を引き起こす可能性があるため、デフォルトでは処理されません)。


リクエスト1.2.1より前の古い回答です。 :

requests ライブラリは、これを実際に設定できるようにはしていませんし、またそのつもりもありません ( このプルリクエスト ). 現在 (リクエスト 1.1) では、再試行回数は 0 に設定されています。 もし本当に高い値を設定したい場合は、これをグローバルに設定する必要があります。

import requests

requests.adapters.DEFAULT_RETRIES = 5

この定数は文書化されていません。将来のリリースではこの処理方法が変更される可能性がありますので、ご自分の責任で使用してください。

更新情報 : そして、この した バージョン 1.2.1 で変更されました。 を設定するオプションが追加されました。 max_retries パラメータ を追加しました。 HTTPAdapter() クラス が追加されたため、代替のトランスポートアダプタを使用する必要があります。にもパッチを当てない限り、モンキーパッチのアプローチはもはや機能しません。 HTTPAdapter.__init__() のデフォルトを変更しました(あまりお勧めできません)。