栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python 强大的错误重试库 tenacity retry

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python 强大的错误重试库 tenacity retry

文章目录
  • 适用场景
  • 功能使用说明
    • 设置最大重试次数
    • 设置重试最大超时时长
    • 组合重试条件
    • 设置相邻两次重试的时间间隔
    • 自定义是否触发重试
  • 代码

适用场景
  • web接口测试
  • 爬虫
功能使用说明

tenacity的错误重试核心功能是由其retry装饰器来实现的
默认retry不给参数时,将会不停地重试下去, 这也不符合需求的.

设置最大重试次数

retry(stop=stop_after_attempt(3)) 将在尝试3次后,于第4次抛出异常.

设置重试最大超时时长

retry(stop=stop_after_delay(5)),整个重试的超时时长超于5秒, 将停止重试.

组合重试条件

retry(stop=(stop_after_delay(5) | stop_after_attempt(3)))

将在重试总时长超过5秒后, 或者 重试3次后, 停止重试

设置相邻两次重试的时间间隔

有两种方式:

  1. 设置固定的时间间隔
retry(wait=wait_fixed(1), stop=stop_after_attempt(3))

重试3次, 每次重试间隔1秒

  1. 设置随机的时间间隔
retry(wait=wait_random(min=1, max=3), stop=stop_after_attempt(3))

重试3次, 每次重试间隔1到3秒

自定义是否触发重试
  1. 捕捉或忽略特定的错误类型
# 捕捉错误类型
retry(retry=retry_if_exception_type(FileExistsError))

# 忽略错误类型
retry(retry=retry_if_not_exception_type(FileNotFoundError))

若是FileExistsError,则重试
若是FileNotFoundError,则不用重试.

  1. 自定义函数结果,使用条件判断函数
retry(retry=retry_if_result(lambda x: x>1))

若函数体的返回结果大于1, 则重试

  1. 对函数的错误重试情况进行统计
print(fun_name.retry.statistics)

可以打印fun_name的重试统计情况

代码
from tenacity import retry, stop_after_attempt, stop_after_delay
import random


# 设置重试次数
@retry(stop=stop_after_attempt(3))
def fun_name1():
    print("函数体内执行")
    raise Exception

# 设置重试总超时时长
import time
@retry(stop=stop_after_delay(2))
def fun_name2():
    print("函数体内执行")
    time.sleep(1)
    print(time.time())
    raise Exception


# 组合重试停止条件
@retry(stop=(stop_after_delay(3) | stop_after_attempt(10) ))
def fun_name3():
    print("函数体内执行")
    time.sleep(random.random())
    print(time.time())
    raise Exception


# 设置相邻重试间隔为固定时间间隔
from tenacity import wait_fixed, wait_random
@retry(wait=wait_fixed(1), stop=stop_after_delay(5))
def fun_name4():
    print("函数体内执行")
    print(time.time())
    raise Exception


# 设置相邻重试间隔 随机时间间隔
@retry(wait=wait_random(min=1,max=3), stop=stop_after_delay(5))
def fun_name5():
    print("函数体内执行")
    print(time.time())
    raise Exception

fun_name5()
fun_name4()
fun_name3()
fun_name2()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1029745.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号