2017-12-16 25 views
6

現在、私は私のgrequestラッパーに接続の再試行の最大数を設定するために次のようにします。私は、引数の1つとしてセッションself._sgrequestオブジェクトの束を作成同じセッション内のすべてのプール接続で最大再試行回数を設定できますか?

self._s = Session() 
retries = Retry(total=5, status_forcelist=[500, 502, 503, 504]) 
self._s.mount('http://, HTTPAdapter(max_retries=retries)) 

。 exmapleについて、GET要求のセットを作成すると、このようなものを使用して行うことになります。

requests = [grequests.get(url, ..., 'session': self._s')]

は最後に、これらはすべて、最終的grequests.map(requests, ...)を使用して発行されます。

問題は、再試行の最大回数を持続させ、接続プールのすべての接続で共有する方法が欲しいということです。再試行は、依然として個々の接続ベースでのみ適用されるようです。これを行う方法はありますか?総コール数が減少するたびに新しいRetry()オブジェクトが作成されているように見えますか?

答えて

0

あなたは運が不足していると思います。

は、各試みが更新された値を持つ新しい再試行オブジェクトを作成します。再試行し、その彼らが安全に再利用することができます。Retryドキュメンテーション文字列は(抜粋)と言います。

あなたが言ったように、新しいオブジェクトが作成されます。これは設計によって行われます。

さらに、Retryオブジェクト自体がスレッド化を可能にするもので、接続試行の間にスリープします。だから1つRetryオブジェクトこのデザインでは、1つのスレッドに関連付けられている必要があります。ごめんなさい。場合によっては、urllib.utils.retryへのリンクがあります。

関連する問題