tenacity发生异常/失败/错误时重试retry机制,Python

安装:

pip install tenacity 

示例:

@retry
def non_stop():print("永不停息")raise Exception

代码运行后,将用不停息的输出:

永不停息
永不停息
永不停息...

发生异常重试若干次后退出。

from tenacity import retry, stop_after_attempt@retry(stop=stop_after_attempt(3))
def non_stop():print("永不停息")raise Exception

输出:

永不停息
永不停息
永不停息

上面代码发生异常重试3次后结束重试。

重试若干时间(秒)后退出:

import datetimefrom tenacity import retry, stop_after_delay@retry(stop=stop_after_delay(2))
def non_stop():t = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')print(t)raise Exception

上面代码发生异常错误重试2秒后结束重试。

发生异常重试若干次或者重试若干秒后结束:

import datetimefrom tenacity import retry, stop_after_delay, stop_after_attempt@retry(stop=(stop_after_delay(2) | stop_after_attempt(3)))
def retry_stop():t = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')print(t)raise Exception

上面代码重试3次或者重试2秒后结束。

发生异常后,等待一定时间后重试:

import datetimefrom tenacity import retry, wait_fixed@retry(wait=wait_fixed(3))
def retry_stop():t = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')print(t)raise Exception

以上代码发生异常后,等待3秒重试。

发生异常,等待一定随机时间后重试:

import datetimefrom tenacity import retry, wait_random@retry(wait=wait_random(min=2, max=5))
def exc_retry():t = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')print(t)raise Exception

以上代码,发生异常后,等待最少2秒,最多5秒的随机时间后重试。

发生异常后,等待一定量时间,再加上一定随机时间后重试:

import datetimefrom tenacity import retry, wait_random, wait_fixed@retry(wait=wait_fixed(2) + wait_random(1, 3))
def exc_retry():t = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')print(t)raise Exception

上面代码发生异常后,等待2秒的基础上再加上1到3秒之间随机时间总和后重试。

只有当发生特定异常后才重试:

import datetimefrom tenacity import retry, retry_if_exception_type@retry(retry=retry_if_exception_type(IOError))
def exc_retry():t = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')print(t)raise IOError

上面代码,只有发生IOError后才重试。

只有当满足条件为True时候,才重试:

import datetimefrom tenacity import retry, retry_if_resultdef is_value(value):print(value)return True@retry(retry=retry_if_result(is_value))
def program_retry():t = datetime.datetime.now().strftime('%M:%S')print(t)return -1# raise Exception

program_retry()返回的值进入is_value()函数处理,只有当is_value()函数返回值为True时候才重试,如果is_value()返回为False,则停止重试。

查看异常信息统计:

import datetimefrom tenacity import retry, stop_after_attempt@retry(stop=stop_after_attempt(3))
def program_retry():t = datetime.datetime.now().strftime('%M:%S')print(t)raise Exception()if __name__ == '__main__':try:program_retry()except:passprint(program_retry.retry.statistics)

输出:

23:32
23:32
23:32
{'start_time': 你的程序启动时间, 'attempt_number': 3, 'idle_for': 0, 'delay_since_first_attempt': 0.0}

tenacity发生异常/失败/错误时重试retry机制,Python相关推荐

  1. Tomcat出错:调用方法[manageApp]时发生异常/启动子级时出错/无法启动组件/找到多个名为spring_web的片段

    打开 进入springframework 点进去删除不要的

  2. 失败用例重跑机制-python装饰器

    def failrun(n=3):def decorator(func):def wrapper(*args,**kw):for i in range(n):try:r= func(*args,**k ...

  3. DownloadString”时发生异常:“基础连接已经关闭: 发送时发生错误

    win10下安装scoop遇到错误:"DownloadString"时发生异常:"基础连接已经关闭: 发送时发生错误",记录一下解决过程. 确认powershe ...

  4. 拦截PHP各种异常和错误,发生致命错误时进行报警,万事防患于未然

    原文:拦截PHP各种异常和错误,发生致命错误时进行报警,万事防患于未然 在日常开发中,大多数人的做法是在开发环境时开启调试模式,在产品环境关闭调试模式.在开发的时候可以查看各种错误.异常,但是在线上就 ...

  5. 服务器无法继续该事务 3400000006 错误原因--JAVA调用SQLSERVER存储过程时过程发生异常内部事务未

    通过JAVA调用SQLSERVER存储过程时,存储过程内部发生了类型转换异常,在类型转换异常发生之前已经将事务打开了,并且在类型转换那一行没有采用像如下错误处理: if @@error<> ...

  6. HTTP状态 500 - 内部服务器错误(在 [104] 行处理 [/index.jsp] 时发生异常)

    运行程序时报500错误,错误如下: 类型 异常报告消息 在 [104] 行处理 [/index.jsp] 时发生异常描述 服务器遇到一个意外的情况,阻止它完成请求.例外情况org.apache.jas ...

  7. Windows上发生异常时抓取dump

    文章目录 正文 RaiseException函数 捕获大部分崩溃 - SetUnhandledExceptionFilter 那还有小部分呢? 为什么调试器可以抓到所有崩溃? CRT, C++ STL ...

  8. DownloadString”时发生异常:“无法解析此远程名称: ‘raw.gith ubusercontent.com

    powershell反弹时 出现错误 使用"1"个参数调用"DownloadString"时发生异常:"无法解析此远程名称: 'raw.gith ub ...

  9. 多线程:一个线程在运行时发生异常会怎么样?

    Java中Throwable分为Exception和Error:  出现Error的情况下,程序会停止运行.  Exception分为RuntimeException和非运行时异常.  非运行时异常必 ...

最新文章

  1. java float 加法_JAVA 实现精确的加减乘除运算
  2. 集合框架知识系列05 HashMap的源码分析和使用示例
  3. Atitit main函数的ast分析  数组参数调用的ast astview解析
  4. 监控系统常见的故障及解决方法.
  5. 我很明确自己未来的方向,计算机和经济外加管理
  6. CodeForces - 1501C Going Home(鸽巢原理+暴力)
  7. IBM Storwize V7000 Introduction(1)
  8. 这是我见过的最全的训练数据集,没有之一!
  9. Android工具HierarchyViewer 代码导读(3) -- 后台代码
  10. 【ACM算法讲堂之 - 计算几何基础】:【点积和叉积】(附一些模板)
  11. 让我们来比较C#,C++和Java之间重写虚函数的区别
  12. 【今日CV 视觉论文速览】Wed, 20 Feb 2019
  13. Atitit 外包管理规范attilax总结
  14. 292. Nim游戏
  15. 比特币那么火,今晚直播带你去「挖矿」!
  16. 服务器硬盘品牌型号认识,服务器的硬盘和主板能和FBD内存搭配的,现在主流的是什么品牌和型号啊?...
  17. 渗透中POC、EXP、Payload、Shellcode和exploit的区别
  18. Word里面的大括号怎么打出来?
  19. 【转】redis利用姿势收集
  20. matlab练习程序(RGB2CMY、CMY2RGB)

热门文章

  1. 中国 省 市 自治区 资料
  2. 程序员常用资源工具集合【建议收藏】
  3. python清洗数据去除停用词_python之NLP数据清洗
  4. iOS开发系列--音频播放、录音、视频播放、拍照、视频录制
  5. 误删c盘user文件夹后,如何恢复文件
  6. 成长的思考:如何在工作中保持高速的自我成长
  7. 计算机是通过电网进行传播,2016年9月计算机一级MS Office考前必做试题及答案(4)...
  8. 3、线性表的顺序存储结构(顺序表)
  9. App Extension
  10. 180420 逆向-DDCTF_WP(Re)