有参数重试(1)stop_max_attempt_number
在retry中传入stop_max_attempt_number参数后可以指定失败重试的次数
@retry(stop_max_attempt_number=2)def func(): print(f记录失败重试) for item in range(0,100): result=item / 0 print(result) return resultfunc()因为这里我们指定了失败后进行两次重试,如果重试执行两次后还是报错则结束重试,将错误信息抛出来。
**(2)wait_fixed**传入wati_fixed后,可以指定重试的时间
from retrying import retryimport time# 设置三秒重试一次@retry(wait_fixed=3000) def func(): print(f记录失败重试:,time.strftime(%y-%m-%d %h:%m:%s)) result=1 / 0 print(result) return resultfunc()
配置重试间隔时间后,成语遇到执行失败或者报错后,就会根据设置的重试时间去进行重试执行
(3)wait_random_min和wait_random_max
通常wait_random_min和wait_random_max是一起搭配使用的,可以设置一个重试等待的时间,然后会在设置的时间区间内随机取一个等待时间进行重试
from retrying import retryimport time@retry(wait_random_min=1000,wait_random_max=9000)def func(): print(f记录失败重试:,time.strftime(%y-%m-%d %h:%m:%s)) result=1 / 0 print(result) return resultfunc()
(4)wait_exponential_multiplier和wait_exponential_max
官方解释为:以指数的形式产生两次retrying之间的停留时间, 产生的值为2^previous_attempt_number * wait_exponential_multiplier, previous_attempt_number是前面已经retry的次数, 如果产生的这个值超过了wait_exponential_max的大小, 那么之后两个retrying之间的停留值都为wait_exponential_max
通俗来点讲就是每次重试的时间以wait_exponential_multiplier设置的值2,如果重试后还是失败则继续2,直到最后的值等于或则超过wait_exponential_max设置的值后,后面的每一次重试等待时间都是wait_exponential_max设置的值
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 / 0 print(result) return resultfunc()
(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 / 0 return resultfunc()
使用wait_func通过调用其他可执行的函数,我们可以借助它来做一些临时的补救措施,避免程序一直无法运行而产生的影响。
(6)其他参数
在retry中还存在有很多参数,有兴趣的小伙伴可以去详细了解下
stop_max_attempt_number:在停止之前尝试的最大次数,最后一次如果还是有异常则会抛出异常,停止运行,默认为5次stop_max_delay:最大延迟时间,大概意思就是:如果调用的函数出现异常,那么就会重复调用这个函数,最大调用时间,默认为100毫秒wait_fixed:两次调用方法期间停留时长, 如果出现异常则会一直重复调用,默认 1000毫秒wait_random_min:在两次调用方法停留时长,停留最短时间,默认为0wait_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的大小,那么之后两个「retrying」之间的停留值都为wait_exponential_maxretry_on_exception: 指定一个函数,如果此函数返回指定异常,则会重试,如果不是指定的异常则会退出retry_on_result:指定一个函数,如果指定的函数返回true,则重试,否则抛出异常退出wrap_exception:参数设置为true/false,如果指定的异常类型,包裹在retryerror中,会看到retryerror和程序抛的exception errorstop_func: 每次抛出异常时都会执行的函数,如果和stop_max_delay、stop_max_attempt_number配合使用,则后两者会失效 (指定的stop_func会有两个参数:attempts, delay)wait_func:和stop_func用法差不多。
ams光谱传感技术助光学测量技术公司实现COVID-19(SARS-CoV-2)快速专业检测
TLC NAND Flash Wafer合约价下跌13-17%,创单月跌幅新高
CAM的概念及分类介绍
适用于低延迟和时间敏感型工业物联网应用的SDR
“叮咚”门铃电路设计
Python中retrying库的有参数重试
丰田正着力加强在中国的布局 展开电动汽车的发展
英特尔预计2020年可直接用人脑控制电脑
不受控制的校正器是什么原理
三星Galaxy Xcover 5通过MIL-STD-810G认证
放大机曝光仪表
5G会对智能家居产生怎样巨大的影响
2020年美国芯片制造商的销售额达2080亿美元
5G通信调制解调器与高性能移动AP合二为一
最新版本“人体芯片”装置 能够容纳多达10种人造“人类器官”
e络盟独家发售新款 Moto Mods 开发套件及周边产品
单片机的上拉电阻和下拉电阻
艾迈斯欧司朗全新真彩颜色传感器,可实现卓越的自动白平衡
数码摄像机遥控功能
华为CFO孟晚舟加拿大被捕 贸易冲突风云再起?