はじめに
本記事では、Tenacityを用いたリトライ処理について簡単に紹介します。Tenacityは再試行動作を簡素的に実装できるライブラリで、2023年8月現在でもアップデートされています。
本記事では基本的な処理として、以下を紹介します。
- リトライ処理の停止条件の設定
- リトライ処理の間の待機条件の設定
- 上記2つの組み合わせ
- はじめに
- 1. Tenacityについて
- 2. リトライ処理の基本
- 3. リトライ処理の停止条件の設定
- 4. リトライ処理の間の待機条件の設定
- 5. リトライ処理の停止条件と待機条件の組み合わせの設定
- おわりに
1. Tenacityについて
公式ドキュメントは以下になります。
Tenacity — Tenacity documentation
ライブラリのインストールは下記のコマンドで実施できます。
2. リトライ処理の基本
リトライ処理の基本としては下記になります。リトライ処理対象の関数に「@retry」を付与します。なお、今回は「raise Exception」にて例外(エラー)を発生させて動作を確認します。
3. リトライ処理の停止条件の設定
処理の再試行をしたい際に停止条件がない場合、永遠に処理を再試行します。そこで、停止条件を設けることで再試行を一定の条件で停止させます。なお、今回は「raise Exception」にて例外(エラー)を発生させて動作を確認します。
まず、下記は「5回再試行後に停止」する例です。「stop=stop_after_attempt(5)」を指定してあげることで5回再試行後にリトライ処理を停止することができます。
次に、「再試行を6秒実施したのちに停止」する例です。「stop=stop_after_delay(6)」を指定してあげることで6秒間再試行後にリトライ処理を停止することができます。
4. リトライ処理の間の待機条件の設定
続いては待機条件です。処理の再試行をしたい際にどのようなタイミングで再試行するかを設定できます。なお、今回は「raise Exception」にて例外(エラー)を発生させて動作を確認します。
まずは、「2秒間待機して再試行」する例です。「wait=wait_fixed(2)」を指定してあげることで、2秒ごとに再試行することができます。
次に、「ランダムな秒数待機して再試行」する例です。「wait=wait_random(min=1, max=2)」を指定してあげることで、1~2秒の間の時間で再試行することができます。
5. リトライ処理の停止条件と待機条件の組み合わせの設定
最後に、停止条件と待機条件の両方を設定してみます。なお、今回は「raise Exception」にて例外(エラー)を発生させて動作を確認します。
上記で示した5「5回再試行後に停止」と「2秒間ごとに再試行」の両条件を指定します。停止条件はstopで、待機条件はwaitでそれぞれ指定することで両条件を指定できます。下記の例を実行することで、それが実現できます。
おわりに
本記事では、Tenacityを用いたリトライ処理について簡単に紹介しました。システムからデータを出力する際やシステム間の接続の際に、出力ファイルが開かれている、接続の失敗で再試行をするケースが考えられます。その際に役立てれば幸いです。