from retrying import retryimport time@retry(wait_exponential_multiplier=1000,wait_exponential_max=10000)def func():print(f"记录失败重试:",time.strftime("%Y-%m-%d %H:%M:%S"))result=1 / 0print(result)return resultfunc()
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
文章插图
(5)wait_func
在前面介绍的参数都是如何配置失败冲重试的等待时间或者重试次数之类的,但是我们不能时时刻刻盯着程序,在程序代码发生错误时我们应该要进行发送短信或者邮件之类的提醒才行
在这里就可以使用到wait_func参数,它接收一个可执行函数,返回一个具体的间隔时间数值,单位ms 。接收的函数须接收两个参数:attempt_number当前运行次数,delay_since_first_attempt_ms当前重试机制运行时间(单位ms)
from retrying import retryimport timedef func_demo(attempt_number,delay_since_first_attempt_ms):print("函数运行失败后运行该函数")if attempt_number == 5:print("已经重试失败五次了,开始准备发送提醒")if attempt_number == 10:print("已经重试失败超10次了 , 发送邮件给相关人员紧急处理")if attempt_number >10:print("重试时间过长,做一些其他临时方案进行补救")# return一个重试的时间return 2000@retry(wait_func=func_demo)def func():print(f"记录失败重试:",time.strftime("%Y-%m-%d %H:%M:%S"))result=1 / 0return resultfunc()
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
文章插图
使用wait_func通过调用其他可执行的函数 , 我们可以借助它来做一些临时的补救措施,避免程序一直无法运行而产生的影响 。
(6) 其他参数
在retry中还存在有很多参数,有兴趣的小伙伴可以去详细了解下
文章插图
- stop_max_attempt_number:在停止之前尝试的最大次数,最后一次如果还是有异常则会抛出异常,停止运行,默认为5次
- stop_max_delay:最大延迟时间,大概意思就是:如果调用的函数出现异常,那么就会重复调用这个函数 , 最大调用时间,默认为100毫秒
- wait_fixed:两次调用方法期间停留时长, 如果出现异常则会一直重复调用,默认 1000毫秒
- wait_random_min:在两次调用方法停留时长,停留最短时间,默认为0
- wait_random_max:在两次调用方法停留时长,停留最长时间 , 默认为1000毫秒
- wait_incrementing_increment:每调用一次则会增加的时长,默认 100毫秒
- wait_exponential_multiplier和wait_exponential_max:以指数的形式产生两次「retrying」之间的停留时间,产生的值为2^previous_attempt_number * wait_exponential_multiplier , previous_attempt_number是前面已经「retry」的次数,如果产生的这个值超过了wait_exponential_max的大?。?敲粗?罅礁觥竢etrying」之间的停留值都为wait_exponential_max
- retry_on_exception: 指定一个函数,如果此函数返回指定异常 , 则会重试,如果不是指定的异常则会退出
- retry_on_result:指定一个函数 , 如果指定的函数返回True,则重试 , 否则抛出异常退出
- wrap_exception:参数设置为True/False,如果指定的异常类型,包裹在RetryError中,会看到RetryError和程序抛的Exception error
- stop_func: 每次抛出异常时都会执行的函数 , 如果和stop_max_delay、stop_max_attempt_number配合使用,则后两者会失效 (指定的stop_func会有两个参数:attempts, delay)
- wait_func:和stop_func用法差不多 。
推荐阅读
- 从零开始学Python网络编程:轻松搭建服务器和客户端
- 如何在零信任世界中实现API安全性?
- 属羊的女人命好 属于羊的女人命运如何
- 逆水寒手游攻略大全,新手如何快速提升战力,让你新手秒变大佬
- 如何解决“程序正常初始化失败”
- 衣服上的水彩笔痕迹怎么去掉 衣服上的水彩笔颜色如何洗掉
- 盆栽龙眼怎么种会结果 如何盆栽龙眼
- 衣服缩水了有什么办法吗 衣服缩水如何办
- 如何去除口香糖在鞋上 如何去除口香糖
- 怎么种仙人球盆栽 如何种仙人球盆栽