小编写这篇文章的主要目的,主要是给大家讲解一下,关于Python机制的一些问题,比如重新调试的机制是什么呢?应用到它的场景还是很多的,下面跟小编一块去学习吧。
介绍:
为了避免网络问题出现的错误,比如网络延迟或者是宕机,往往都会出现请求超时的问题。
这里要给大家介绍的是一个第三方库-Tenacity(标题中的重试机制并并不准确,它不是Python的内置模块,因此并不能称之为机制),它实现了几乎我们可以使用到的所有重试场景,喜欢记得收藏、关注、点赞。
比如:
在什么情况下才进行重试?
重试几次呢?
重试多久后结束?
每次重试的间隔多长呢?
重试失败后的回调?
在使用它之前,先要安装它
$pip install tenacity
1.最基本的重试
无条件重试,重试之间无间隔
from tenacity import retry retry def test_retry(): print("等待重试,重试无间隔执行...") raise Exception test_retry()
无条件重试,但是在重试之前要等待2秒
from tenacity import retry,wait_fixed retry(wait=wait_fixed(2)) def test_retry(): print("等待重试...") raise Exception test_retry()
2.设置停止基本条件
只重试7次
from tenacity import retry,stop_after_attempt retry(stop=stop_after_attempt(7)) def test_retry(): print("等待重试...") raise Exception test_retry()
重试10秒后不再重试
from tenacity import retry,stop_after_delay retry(stop=stop_after_delay(10)) def test_retry(): print("等待重试...") raise Exception test_retry()
或者上面两个条件满足一个就结束重试
from tenacity import retry,stop_after_delay,stop_after_attempt retry(stop=(stop_after_delay(10)|stop_after_attempt(7))) def test_retry(): print("等待重试...") raise Exception test_retry()
3.设置何时进行重试
在出现特定错误/异常(比如请求超时)的情况下,再进行重试 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.Timeout test_retry()
在满足自定义条件时,再进行重试。
如下示例,当test_retry函数返回值为False时,再进行重试
from tenacity import retry,stop_after_attempt,retry_if_result def is_false(value): return value is False retry(stop=stop_after_attempt(3), retry=retry_if_result(is_false)) def test_retry(): return False test_retry()
4.重试后错误重新抛出
当出现异常后,tenacity会进行重试,若重试后还是失败,默认情况下,往上抛出的异常会变成RetryError,而不是最根本的原因。
因此可以加一个参数(reraise=True),使得当重试失败后,往外抛出的异常还是原来的那个。
from tenacity import retry,stop_after_attempt retry(stop=stop_after_attempt(7),reraise=True) def test_retry(): print("等待重试...") raise Exception test_retry()
5.设置回调函数
当最后一次重试失败后,可以执行一个回调函数
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 False print(test_retry())
输出如下
等待重试中...
等待重试中...
等待重试中...
执行回调函数
False
至此,小编就为大家介绍到这里了,希望可以给各位读者带来帮助。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/127998.html
小编写这篇文字的一个主要目的,主要是给大家解答关于python的一些相关事宜,主要涉及到内容是如何利用其python获取返回值,那么,返回值的三种方式分别是什么呢?具体的内容,下面就给大家详细的做出解答。 提到线程,你的大脑应该有这样的印象:我们可以控制它何时开始,却无法控制它何时结束,那么如何获取线程的返回值呢?今天就分享一下自己的一些做法。 方法一 使用全局变量的列表,来保存返回值 ...
小编写这篇文章的一个主要目的,主要是来给大家做个介绍,介绍的内容主要是涉及到Python一些试题的讲解,小编给大家总结出来了五道必考的题目,大家可要仔细阅读哦,下面就给大家详细解答。 1、使用while循环实现输出2-3+4-5+6...+100的和 #方法一 #从2开始计算 i=2 #定义一个变量用于保存结果 sum=0 whilei<=100: i...
小编写这篇文章的主要目的,主要是给大家介绍关于Python numpy和matlab区别的介绍,具体区别,下文给大家详细的解答。 numpy和matlab的几点差异 Python numpy和matlab都是便捷灵活的科学计算语言,两者具有很多相似之处,但也有一些混淆的地方,这里假定你熟悉matlab,但不了解numpy,记录几个numpy实例: 1、Numpy数组索引指定开始和结束时 ...
小编写这篇文章的主要目的,主要是给大家来做一个解答,解答的内容是关于Python代码的事宜,将会教给大家如何使用Python去引用相关的模块,那么,具体的引用方法是什么呢?有什么技巧可言呢?下面就给大家详细解答下。 平时写的一些Python的代码,需要在其他模块里面复用。最粗狂的方法就是直接copy过去。 但这种方式太麻烦,copy一堆代码,导致代码量也很多。copy的也不爽。 下面就介...
Python pygame作为一门常见的技能,其实,它的应用范围还是比较的广泛的,那么,它是怎么实现其拼图游戏呢?下面就以案例的形式,去给大家做个解答,下面就给大家详细解答下。 pygame介绍 Python Pygame是一款专门为开发和设计2D电子游戏而生的软件包,它支Windows、Linux、Mac OS等操作系统,具有良好的跨平台性。Pygame由Pete Shinners于20...
阅读 909·2023-01-14 11:38
阅读 876·2023-01-14 11:04
阅读 739·2023-01-14 10:48
阅读 1980·2023-01-14 10:34
阅读 941·2023-01-14 10:24
阅读 818·2023-01-14 10:18
阅读 498·2023-01-14 10:09
阅读 571·2023-01-14 10:02