【python】tenacityを使用したリトライ処理

IT
スポンサーリンク

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

 

 

ブログランキング・にほんブログ村へ
にほんブログ村


人気ブログランキング

 

 

コメント

タイトルとURLをコピーしました