【PY模块】尝试多次请求 retrying(第三方库) [ Python极客 ]
大数据男孩 文章 正文
明妃
{{nature("2022-08-14 17:23:19")}}更新说明
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()
[]()
常用方式
可以搭配使用
# 最大重试次数
@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()
[]()
{{nature('2020-01-02 16:47:07')}} {{format('12522')}}人已阅读
{{nature('2019-12-11 20:43:10')}} {{format('9410')}}人已阅读
{{nature('2019-12-26 17:20:52')}} {{format('7405')}}人已阅读
{{nature('2019-12-26 16:03:55')}} {{format('4880')}}人已阅读
目录
标签云
一言
评论 0
{{userInfo.data?.nickname}}
{{userInfo.data?.email}}