目录

python 请求重试机制tenacity

目录

python 请求重试机制tenacity

优秀的参考 ref from tenacity import *

正常看到错误就重试

1
2
3
4
@retry
def test_retry1():
    print("等待重试.....")
    raise Exception  # 通过raise直接返回一个错误

设置最大的重试次数

1
2
3
4
@retry(stop=stop_after_attempt(5))
def test_retry2():
    print("等待重试.....")
    raise Exception

设置最大重试时间, 这里的意思是5秒内如果还错误就继续执行

1
2
3
4
@retry(stop=stop_after_delay(5))
def test_retry3():
    print("等待重试.....")
    return "hello" + 1

指定特定的错误类型

1
2
3
4
@retry(retry=retry_if_exception_type(TypeError))
def test_retry4():
    print("等待重试.....")
    raise TypeError # 捕获类型错误,当出现类型错误时重试

同时设置多个参数

1
2
3
4
5
6
7
8
from tenacity import retry, stop_after_delay, stop_after_attempt

@retry(stop=(stop_after_delay(5) | stop_after_attempt(7)))
def test_retry():
    print("等待重试....")
    raise Exception

test_retry()

自定义

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16


# 首先定义了一个函数symbol,它的作用是判断传入的值是否为None;它返回一个布尔值,如果结果value=None,则返回true,否则返回False
def symbol(value):
    return value is None


# 装饰器中retry=retry_if_result(symbol),表示把test_retry函数的结果传入symbol,判断test_retry的结果是否为None,
# 如果=None,就进行重试(retry),如果不等于None,就结束并返回函数值(所以达成重试的条件是test_retry的结果是否为条件函数定义的结果)
@retry(stop=stop_after_attempt(3), retry=retry_if_result(symbol), reraise=True)
def test_retry():
    print("等待重试.....")
    return None

if __name__ == '__main__':
    test_retry5()