Python重试机制模块:tenacity
在日常的工作中,可能由于网络波动原因,导致请求失败,下载超时,又或者是IO阻塞,导致不能及时响应。这时候就需要对功能添加重试代码,这里介绍一个python的第三方库:tenacity。
安装方法:
pip3 install tenacity
官方详细文档:https://pypi.org/project/retry/
示例:
1. 最简单的重试(无限重试)
from tenacity import retry@retry
def test_retry():print("重试无间隔执行...")raise Exceptiontest_retry()
装饰器@retry的常用参数说明:
@retry(wait=wait_fixed(3), # 等待3秒后重试stop=stop_after_attempt(3), # 只重试3次stop=stop_after_delay(3), # 重试3秒后不再重试retry=retry_if_exception_type(exceptions_object), # 捕获到指定异常后才重试retry=retry_if_result(func), # 满足自定义条件时,进行重试,func为函数名,返回true时重试reraise=True, # 重试后抛出原来的错误retry_error_callback=callback_func # 最后一次重试失败,则调用回调函数 )
2. 等待3s后进行重试
from tenacity import retry, wait_fixed@retry(wait=wait_fixed(3))
def test_retry():print("等待重试...")raise Exceptiontest_retry()
3. 设置重试停止的条件
3.1 只重试3次就停止重试
from tenacity import retry, stop_after_attempt@retry(stop=stop_after_attempt(3))
def test_retry():print("等待重试...")raise Exceptiontest_retry()
3.2 重试3秒后不再重试
from tenacity import retry, stop_after_delay@retry(stop=stop_after_delay(3))
def test_retry():print("等待重试...")raise Exceptiontest_retry()
3.3 满足3.1或3.2其中一个条件时,不再重试
from tenacity import retry, stop_after_delay, stop_after_attempt@retry(stop=(stop_after_delay(3) | stop_after_attempt(3)))
def test_retry():print("等待重试...")raise Exceptiontest_retry()
4. 满足条件时,进行重试。
4.1 捕获到指定的异常时,进行重试
from requests import exceptions
from tenacity import retry, retry_if_exception_type@retry(retry=retry_if_exception_type(exceptions.Timeout))
def test_retry():print("等待重试...")raise exceptions.Timeouttest_retry()
4.2 满足自定义的条件时,进行重试。当is_false函数返回true,则进行重试,参数value为函数test_retry的返回值。
from tenacity import retry, stop_after_attempt, retry_if_resultdef is_false(value):return value is False@retry(stop=stop_after_attempt(3),retry=retry_if_result(is_false))
def test_retry():return Falsetest_retry()
5. 重试后抛出准确的异常
最后一次重试抛出的异常是RetryError,不会是代码逻辑真正发生的异常,想要抛出真正的异常,则设置reraise=True
from tenacity import retry, stop_after_attempt@retry(stop=stop_after_attempt(7), reraise=True)
def test_retry():print("等待重试...")raise Exceptiontest_retry()
6. 最后一个重试失败后调用回调函数。
from tenacity import *def return_last_value(retry_state):print("执行回调函数")return retry_state.outcome.result() # 表示返回原函数的返回值def is_false(value):return value is False@retry(stop=stop_after_attempt(3),retry_error_callback=return_last_value,retry=retry_if_result(is_false))
def test_retry():print("等待重试中...")return Falseprint(test_retry())
参考:https://zhuanlan.zhihu.com/p/281555097
Python重试机制模块:tenacity相关推荐
- Python重试库Retrying和Tenacity
文章目录 简介 安装 Retrying 初试 最大重试次数 最大重试时间 重试间隔 随机间隔 指数级重试间隔 自定义异常重试 自定义返回重试 参数 Tenacity 初试 最大重试次数 最大重试时间 ...
- 在 python中每个模块用什么来实现_Python代码模块热更新机制实现(reload)
对一个游戏来说,无论是client或server都非常需要一套代码热更新的机制.它能大大提高开发效率,又能超乎玩家期望地在运营期在线修正bug和增添功能.可谓必备机制. 热更新机制的目标是: (1)更 ...
- python导入机制及importlib模块
文章目录 写在篇前 import 关键字 先导概念 namespace & scope Module & Packages module packages regular packag ...
- 「信号机制」Python信号处理—signal模块
转载请注明出处:https://blog.csdn.net/jinixin/article/details/80383177 本文是信号机制三篇记录中的第二篇,介绍Python语言中负责信号处理的si ...
- python 模块 导入机制 模块搜索 Python包 发布python模块或程序
python 模块 python模块:以.py结尾的代码文件. 顶层文件: 程序执行入口 模块文件1 模块文件2 模块文件3 在python中一 ...
- python中怎样使用re模块_[转]Python中RE模块的应用
Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式.Python 1.5之前版本则是通过 regex 模块提供 Emecs 风格的模式.Emacs 风格模式可读性稍差 ...
- python异常机制
python异常处理机制 1.1python的内置异常 当我们在运行代码的时候一旦程序报错,就会终止运行,并且有的异常是不可避免的,但是我们可以对异常进行捕获,防止程序终止. python的内置异常是 ...
- Python multiprocess 多进程模块
转发:http://www.langzi.fun/Python multiprocess 多进程模块.html 需要注意的是,如果使用多线程,用法一定要加上if __name__=='__main__ ...
- python中导入模块用什么命令_Python导入模块的技巧
作为使用Python的开发者,我们一开始学习的内容之一就是如何导入Python的各种模块或库.但是我们注意到,那些经常使用Python的用户并不一定都知道Python的导入机制其实非常灵活.在本文中, ...
- 一文读懂熔断器和重试机制
导语:随着微服务的流行,熔断作为其中一项很重要的技术也广为人知.当微服务的运行质量低于某个临界值时,启动熔断机制,暂停微服务调用一段时间,以保障后端的微服务不会因为持续过负荷而宕机.本文作者介绍了熔断 ...
最新文章
- 【Java】多线程相关复习—— 线程的创建、名字、运行情况以及顺序控制(join方法) 【一】...
- Jmeter中文乱码问题
- 用一句SQL取出第 m 条到第 n 条记录的方法
- python假如输入错误重新输入_用Python写一个拼音输入法
- 为了USB3,吾还是换了电脑
- JavaSE基础Day01
- JAVA 中字符串的长度
- 6950有史以来最经典玩机宝典/软件包/导航
- 网络加速技术浅析(二)
- Elasticsearch 文档内容检索插件 ingest attachment 安装
- Epson针式打印机打印十六进制内容解决方案
- spring boot 尚桂谷学习笔记05 ---Web
- 映射变换(缩放、旋转、剪切)
- 用vs20008生成MFC项目,测试wince
- 战网游戏服务器连接中断,魔兽世界7.0军团再临游戏常见问题及解决方法
- 操作系统——索引分配
- linux dns 自动识别,Linux 自动化部署DNS服务器
- [3D跑酷] GameManager
- 利用matlab处理tiff格式的遥感图像
- Facebook 推出支付服务:Facebook Pay将横跨旗下所有App