pythonでリトライ処理って先日実装したときは、
自前でやってしまっていたのだけど、tenacityっていうモジュールがあること知ったので
サンプルを実装してみた。
コード
実行回数を制限する
try_time = 1 @retry(stop=stop_after_attempt(3)) def retry_judge_method(): global try_time if try_time == 1: try_time += 1 print("1st Error") raise IOError("1st Error") elif try_time == 2: try_time += 1 print("2nd Error") raise IOError("2nd Error") else: return "OK" val = retry_judge_method() print(val)
このサンプルではstop_after_attemptを3としていて
3回までは実行しますよとなっています。
3回目でOKと正常レスポンスを返却しているので、
1st Error 2nd Error OK
このように出力されます。
2回までとすると以下のように関数がエラーで落ちるようになります。
tenacity.RetryError: RetryError[<Future at 0x106a1df10 state=finished raised OSError>]
リトライエラーを制限する
2回目のエラーをValueErrorとして、リトライはIOErrorのみ許容する場合
retry_if_exception_typeのパラメータに許容するエラー型を設定します。
try_time = 1 @retry(retry=retry_if_exception_type(IOError), stop=stop_after_attempt(3)) def retry_judge_method(): global try_time if try_time == 1: try_time += 1 print("1st Error") raise IOError("1st Error") elif try_time == 2: try_time += 1 print("2nd Error") raise ValueError("2nd Error") else: return "OK" val = retry_judge_method() print(val)
想定どおり2回めで以下エラーで落ちますね。
ValueError: 2nd Error
20代前半までは東京で音楽をやりながら両手の指以上の業種でアルバイト生活をしていましたが、某大手プロバイダのテレアポのバイトでPCの知識の無さに愕然とし、コンピュータをもっと知りたい!と思ったことをきっかけに25歳の時にITの世界に未経験で飛び込みました。
紆余曲折を経て、現在は個人事業主としてお仕事させていただいており、10年ほどになります。
web制作から企業システム構築、ツール開発など、フロントエンドもバックエンドもサーバーもDBAも依頼があれば何でもやってきた雑食系エンジニアです。
今風にいうとフルスタックエンジニアということになるのでしょうか??
→ 詳細プロフィールというか、生い立ちはこちら
→スキルシートをご覧になる場合はこちら
→お仕事のご依頼やお見積りなどお問い合わせはこちらから!