Python4,它,会魔法吧,来自最强大的错误重试库。(二)

简介: Python4,它,会魔法吧,来自最强大的错误重试库。(二)

2.5 组合重试停止条件


如果同时需要添加最大重试次数以及最大超时时长限制,

在tenacity中仅需要用 | 运算符组合不同的限制条件再传入retry()的stop参数即可,


代码示例


# -*- coding:utf-8 -*-
# @Time   : 2022-04-04
# @Author : carl_DJ
import  time
import random
from tenacity import retry,stop_after_attempt,stop_after_delay
#函数执行重试超过3秒或次数大于5次时均可以结束重试
@retry(stop =(stop_after_attempt(3) | stop_after_delay(5)))
def  demo_four():
    time.sleep(random.random())
    print(f'已过去 {time.time() - start_time} 秒')
    raise Exception
#开始时间
start_time = time.time()
demo_four()


运行结果

image.png


2.6 相邻重试时间间隔


tenacity中提供了一系列非常实用的函数,配合retry()的wait参数,帮助我们妥善处理相邻重试之间的时间间隔,其中较为实用的主要有以下两种方式:


固定时间间隔;

随机时间间隔;


2.6.1 固定时间间隔


使用tenacity中的**wait_fixed()**可以为相邻重试之间设置固定的等待间隔秒数


代码示例


# -*- coding:utf-8 -*-
# @Time   : 2022-04-04
# @Author : carl_DJ
import time
from tenacity import  retry,wait_fixed,stop_after_attempt
# 设置重试等待间隔为1秒
@retry(wait = wait_fixed(1),stop = stop_after_attempt(3))
def demo_five():
    print(f'已过去 {time.time() - start_time} 秒')
    raise  Exception
#开始时间
start_time = time.time()
demo_five()


运行结果


image.png

2.6.2 随机时间间隔


除了设置固定的时间间隔外,tenacity还可以通过**wait_random()**为相邻重试设置均匀分布随机数,只需要设置好均匀分布的范围即可:


代码示例


# -*- coding:utf-8 -*-
# @Time   : 2022-04-04
# @Author : carl_DJ
import time
from tenacity import  retry,wait_random,stop_after_attempt
# 设置重试等待间隔为1到3之间的随机数
@retry(wait = wait_random(min=1,max=3),stop = stop_after_attempt(4))
def demo_six():
    print(f'已过去 {time.time() - start_time} 秒')
    raise  Exception
#开始时间
start_time = time.time()
demo_six()


运行结果

image.png


2.7 自定义是否触发重试


tenacity中retry()的默认策略是当其所装饰的函数执行过程“抛出任何错误”时即进行重试,

但有些情况下需要的可能是对特定错误类型的捕捉/忽略,亦或是对异常计算结果的捕捉。

tenacity中同样内置了相关的实用功能:


捕捉或忽略特定的错误类型;

自定义函数结果条件判断函数;


2.7.1 忽略特定错误类型


使用tenacity中的retry_if_exception_type()和retry_if_not_exception_type(),配合retry()的retry参数,对特定的错误类型进行捕捉或忽略:


代码示例


# -*- coding:utf-8 -*-
# @Time   : 2022-04-04
# @Author : carl_DJ
'''
捕捉或忽略特定的错误类型
'''
from tenacity import retry,retry_if_exception_type,retry_if_not_exception_type
#retry_if_exception_type()
@retry(retry=retry_if_exception_type(FileExistsError))
def demo_seven():
    raise TimeoutError
demo_seven()
#retry_if_not_exception_type()
@retry(retry=retry_if_not_exception_type(FileNotFoundError))
def demo_eight():
    raise FileNotFoundError
demo_eight()


运行结果


demo_seven()

image.png

demo_eight()

image.png


2.7.2 自定义函数结果条件判断函数


我们可以编写额外的条件判断函数,配合tenacity中的retry_if_result(),实现对函数的返回结果进行自定义条件判断,返回True时才会触发重试操作:


代码示例


# -*- coding:utf-8 -*-
# @Time   : 2022-04-04
# @Author : carl_DJ
import  random
from tenacity import  retry,retry_if_result
@retry(retry = retry_if_result(lambda x: x >= 0.1))
def demo_nine():
    a =  random.random()
    print(f'{a}')
    return a
demo_nine()


运行结果

image.png


3、总结


今天的分享,就到这里了。

是不是奇奇怪怪的姿势,又增加了呢。

在错误的重试姿势,也增加了。

关注小鱼,学习更多关于python第三方库的知识。


目录
相关文章
|
22天前
|
存储 人工智能 测试技术
如何使用LangChain的Python库结合DeepSeek进行多轮次对话?
本文介绍如何使用LangChain结合DeepSeek实现多轮对话,测开人员可借此自动生成测试用例,提升自动化测试效率。
224 125
如何使用LangChain的Python库结合DeepSeek进行多轮次对话?
|
15天前
|
监控 数据可视化 数据挖掘
Python Rich库使用指南:打造更美观的命令行应用
Rich库是Python的终端美化利器,支持彩色文本、智能表格、动态进度条和语法高亮,大幅提升命令行应用的可视化效果与用户体验。
69 0
|
3月前
|
存储 Web App开发 前端开发
Python + Requests库爬取动态Ajax分页数据
Python + Requests库爬取动态Ajax分页数据
|
2月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
120 18
|
2月前
|
机器学习/深度学习 API 异构计算
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
JAX是Google开发的高性能数值计算库,旨在解决NumPy在现代计算需求下的局限性。它不仅兼容NumPy的API,还引入了自动微分、GPU/TPU加速和即时编译(JIT)等关键功能,显著提升了计算效率。JAX适用于机器学习、科学模拟等需要大规模计算和梯度优化的场景,为Python在高性能计算领域开辟了新路径。
181 0
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
|
2月前
|
数据采集 存储 Web App开发
Python爬虫库性能与选型实战指南:从需求到落地的全链路解析
本文深入解析Python爬虫库的性能与选型策略,涵盖需求分析、技术评估与实战案例,助你构建高效稳定的数据采集系统。
253 0
|
2月前
|
存储 监控 安全
Python剪贴板监控实战:clipboard-monitor库的深度解析与扩展应用
本文介绍了基于Python的剪贴板监控技术,结合clipboard-monitor库实现高效、安全的数据追踪。内容涵盖技术选型、核心功能开发、性能优化及实战应用,适用于安全审计、自动化办公等场景,助力提升数据管理效率与安全性。
103 0
|
3月前
|
存储 监控 安全
Python剪贴板监控实战:clipboard-monitor库的深度解析与扩展应用
本文介绍如何利用Python的clipboard-monitor库实现剪贴板监控系统,涵盖文本与图片的实时监听、防重复存储、GUI界面开发及数据加密等核心技术,适用于安全审计与自动化办公场景。
104 0

推荐镜像

更多