Python zeepで再試行処理を取得するにはどうすればよいですか?リクエストの再試行セッションを使用していますが、例外が処理されません

ティム・リチャードソン

私はジープを使用しています。私が使用しているサービスは時々タイムアウトエラーを生成します、そして私は自動再試行機能を使いたいです。

Requests再試行セッションを使用しようとしていますが、タイムアウト例外がキャッチされず、再試行が試行されません。

Requests再試行セッション(以下)を設定し、クラスのクライアント属性を設定しました(現在、エラーを発生させるためのタイムアウト値を使用しています)。

 session = requests_retry_session()
 transport = Transport(session=session,timeout=20,operation_timeout=.001)
 self.client = Client(self.wsdl_url,transport=transport)

..。

def requests_retry_session(
        retries=10,
        backoff_factor=0.3,
        status_forcelist=(500, 502, 503, 504),
        session=None,
) -> requests.Session:
    session = session or requests.Session()
    retry = Retry(
        total=retries,
        read=retries,
        connect=retries,
        backoff_factor=backoff_factor,
        status_forcelist=status_forcelist,
    )
    adapter = HTTPAdapter(max_retries=retry)
    session.mount('http://', adapter)
    session.mount('https://', adapter)
    return session

私はrequests.exceptions.ReadTimeoutを取得しています(このエラーは実際に発生しているエラーと同じだと思いますが、タイムアウトが20秒であるため、ロギングはまだ十分ではありません)

例外はセッションによって処理されていません。

何故なの?

編集:zeepはPOSTリクエストをどこかに送信します。これは、私自身のデバッグでは見つかりませんでしたが、リクエストでデバッグログをアクティブにすると表示されます。

デフォルトでは、再試行はPOSTでは機能しません。

https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html

これを変更するためにmethod_whitelist = Falseを設定し、再試行をトリガーしています。

ティム・リチャードソン

method_whitelist=FalsePOSTが失敗したときに再試行をトリガーするセット注意してください; エンドポイントへのPOSTを繰り返すことが悪い考えかどうかを知る必要があります。

リクエストを使用して再試行セッションを設定するコードを次に示します。

from zeep import Client
from zeep.transports import Transport
import requests
from requests.adapters import HTTPAdapter, Retry

def requests_retry_session(
        retries=5,
        backoff_factor=0.3,
        status_forcelist=(500, 502, 503, 504),
        session=None,**kwargs) -> requests.Session:
    session = session or requests.Session()
    retry = Retry(
        total=retries,
        read=retries,
        connect=retries,
        backoff_factor=backoff_factor,
        status_forcelist=status_forcelist,
        **kwargs
        )
    adapter = HTTPAdapter(max_retries=retry)
    session.mount('http://', adapter)
    session.mount('https://', adapter)
    return session

そして、POSTで再試行するZeepクライアントのインスタンスを作成すると失敗します

 session = requests_retry_session(method_whitelist=False)
 transport = Transport(session=session,timeout=30,operation_timeout=30)
 zeep_client = Client(your_wsdl_url,transport=transport)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ