【Python】回数制限あり/なし のリトライ処理の実装方法を紹介 | 備忘録

スポンサーリンク

プログラムを作るうえで必ず考慮しなければならいものの1つがリトライ処理ですよね。

常に問題なくプログラムが動き続けることが理想ではあるのですが、
設計時点やコードを書いている時点では予想もしていなかったことが起き、
プログラムが止まってしまうことは多々あります。

僕の場合、Python を使用してのWEBスクレイピングツールや、
何かしらインターネット上からの情報取得を自動化するツールを作成することが多く、
外部要因によってインターネット接続が切れてしまい、プログラムが途中停止してしまうことが結構ありました。

そのため、インターネット接続に失敗したり、接続先のサイトから正常な応答が得られなかった場合に
リトライ処理を入れる必要があり、今回その実装方法について調べてみました。

この記事では、コピペするだけでリトライ処理を導入できるサンプルコードを紹介します。

スポンサーリンク

指定回数だけリトライするサンプルコード

処理に失敗した際に、10回だけリトライを実行し、
リトライに成功した場合は “Success!” を表示させ、リトライに失敗した場合は次の処理へ移るという場合のサンプルコードです。

スポンサーリンク

無制限にリトライするサンプルコード

処理が成功するまでリトライし続けるコードのサンプルは以下です。

このコードを使用する場合、例えばスクレイピングで無限リトライなどをしてしまうと、
接続先のサイトに対して負荷をかけすぎてしまうなどの悪影響を及ぼす可能性
があります。

また、処理結果をログ出力している場合では、延々とリトライのログが出力され続け、
ログファイルサイズがとんでもなく肥大してしまってディスク容量を圧迫する
ことが
考えられますので、使いどころには十分注意してください。

指定回数だけリトライし、失敗後にプログラム終了するサンプルコード

指定回数だけリトライ処理をし、そのすべてが失敗したときに
プログラムを停止させたい場合は、以下のようにコードを書けばよいです。
(例えば、インターネット接続確認に20回失敗したらプログラムを終了させたい、など)


さいごに

リトライ処理を入れることで、想定外事象によるプログラムの中断が劇的に減り、
自作ツールの幅も広がりました。

ちなみに Python には retry モジュールなるものが用意されており、
これを利用することでリトライ処理を簡潔に導入できるようです。

今回は while 文や try 文との組み合わせで実装しましたが、
そのうち retry モジュールについても勉強してみようと思います。

コメント