【PY模块】尝试多次请求 retrying(第三方库)

说明

pip install retrying

默认使用会自动调用 报错的函数,直到返回值

import random
from retrying import retry
from loguru import logger

@retry
def fun():
    r = random.randint(0, 4)
    if r == 3:
        logger.success(f'Yes')
    else:
        logger.warning(f'IS {r} NOT 3')
        raise ValueError(f'IS {r} NOT 3')

if __name__ == '__main__':
    fun()

mark

常用方式

可以搭配使用

# 最大重试次数
@retry(stop_max_attempt_number=3)
def fun():

# 重试间隔时间(毫秒)
@retry(wait_fixed=2000) 
def fun()

# 随机重试时间(毫秒)
@retry(wait_random_min=1000, wait_random_max=2000)
def fun()

# 重试超时时间,超过后 不再进行重试(毫秒)
@retry(stop_max_delay=10000)
def fun()

# 重试间隔呈 指数 增长,到 wait_exponential_max 停止增长(毫秒)
# wait_exponential_multiplier 为乘数,1000 相对于 2^1 2^2 ...
@retry(wait_exponential_multiplier=1000, wait_exponential_max=10000)
def fun()

某种错误触发重试

当函数产生 ValueError 时,重试

def retry_if_value_error(exception):
    return isinstance(exception, ValueError)

@retry(retry_on_exception=retry_if_value_error)
def fun():

函数返回 某种结果 重试

import random
from retrying import retry
from loguru import logger

def retry_result_is_3(result):
    # 结果 不为 3 则重试
    return result != 3

@retry(retry_on_result=retry_result_is_3) # lambda x: != 3
def fun():
    r = random.randint(0, 4)
    logger.success(f'IS {r}')
    return r

if __name__ == '__main__':
    fun()

mark

发表评论 / Comment

用心评论~