关于Python错误重试方法总结


Posted in Python onJanuary 03, 2021

前言

Tenacity是一个 Apache 2.0授权的通用重试库,用 Python 编写,用于简化向几乎所有内容添加重试行为的任务。它起源于一个重新尝试的分支,可惜这个分支已经不复存在了。
使用Tenacity可以用来进行测试用例的重跑,爬虫脚本的重跑,以及抢票的失败重抢等等。。。可以使用的场景也是比较多。

使用

首先安装Tenacity

pip install Tenacity

无限重试

第一个重试案例,因为一直是抛出异常错误,所以无限进行重试执行

from tenacity import retry

@retry()
def test_retry():
	print('失败重试中')
 raise Exception
 
test_retry()

关于Python错误重试方法总结

成功则停止

我们来优化成功一次后程序则终止,否则继续重试。

from tenacity import retry
import random

@retry()
def test_retry():
 if random.randint(0,10) > 1:
  print('失败重试中')
  raise Exception
 else:
  print('成功')

test_retry()

关于Python错误重试方法总结

重试次数

毕竟一直重试需要消耗很多资源,所以我们可以设置一些重试的次数,比如在失败多少次后停止重试,不管有没有成功。

from tenacity import retry,stop_after_attempt
import random

@retry(stop=stop_after_attempt(7))
def test_retry():
 # if random.randint(0,10) > 1:
  print('失败重试中')
  raise Exception
 # else:
 #  print('成功')

test_retry()

关于Python错误重试方法总结

重试时间

也可以设置执行的时间

from tenacity import retry,stop_after_attempt,stop_after_delay
import random
from time import sleep
@retry(stop=stop_after_delay(3))
def test_retry():
 # if random.randint(0,10) > 1:
  sleep(1)
  print('失败重试中')
  raise Exception
 # else:
 #  print('成功')

test_retry()

关于Python错误重试方法总结

条件组合

甚至可以使用多个组合条件进行停止,哪个条件先触发则执行哪个

from tenacity import retry,stop_after_attempt,stop_after_delay
import random
from time import sleep
@retry(stop=stop_after_delay(3) | stop_after_attempt(2))
def test_retry():
 # if random.randint(0,10) > 1:
  sleep(1)
  print('失败重试中')
  raise Exception
 # else:
 #  print('成功')

test_retry()

关于Python错误重试方法总结

重试间隔

重试之间的间隔时间太短,所以让我们在重试之间等待2秒钟

from tenacity import retry,stop_after_attempt,stop_after_delay,wait_fixed
import random
import time
@retry(wait=wait_fixed(2))
def test_retry():
 # if random.randint(0,10) > 1:
  print('失败重试中')
  print(time.ctime())
  raise Exception
 # else:
 #  print('成功')

test_retry()

关于Python错误重试方法总结

重试随机间隔

我们还可以设置一些等待时间范围

from tenacity import retry,stop_after_attempt,stop_after_delay,wait_fixed,wait_random
import random
import time
@retry(wait=wait_random(min=1,max=2))
def test_retry():
 # if random.randint(0,10) > 1:
  print('失败重试中')
  print(time.ctime())
  raise Exception
 # else:
 #  print('成功')

test_retry()

关于Python错误重试方法总结

重试前日志

在执行之前打印日志

from tenacity import retry,stop_after_attempt,before_log
import logging
import sys

logging.basicConfig(stream=sys.stderr,level=logging.DEBUG)
logger = logging.getLogger(__name__)

@retry(stop=stop_after_attempt(3),before=before_log(logger,logging.DEBUG))
def test_retry():
 print('失败重试中')
 raise Exception('Fail')

test_retry()

关于Python错误重试方法总结

重试后日志

那么相同的,可以在执行失败后打印日志

from tenacity import retry,stop_after_attempt,after_log
import logging
import sys

logging.basicConfig(stream=sys.stderr,level=logging.DEBUG)
logger = logging.getLogger(__name__)

@retry(stop=stop_after_attempt(3),after=after_log(logger,logging.DEBUG))
def test_retry():
 print('失败重试中')
 raise Exception('Fail')

test_retry()

关于Python错误重试方法总结

基本常用的功能就这些了,如果有需要深入了解的可以访问github地址:https://github.com/jd/tenacity

到此这篇关于关于Python错误重试方法总结的文章就介绍到这了,更多相关Python错误重试方法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python模拟鼠标拖动操作的方法
Mar 11 Python
Python使用functools实现注解同步方法
Feb 06 Python
Linux下python与C++使用dlib实现人脸检测
Jun 29 Python
python调用java的jar包方法
Dec 15 Python
Django 开发调试工具 Django-debug-toolbar使用详解
Jul 23 Python
python cumsum函数的具体使用
Jul 29 Python
python+OpenCV实现图像拼接
Mar 05 Python
python实现udp聊天窗口
Mar 31 Python
PyQt使用QPropertyAnimation开发简单动画
Apr 02 Python
keras.utils.to_categorical和one hot格式解析
Jul 02 Python
python下载的库包存放路径
Jul 27 Python
python调用jenkinsAPI构建jenkins,并传递参数的示例
Dec 09 Python
详解python中的异常和文件读写
Jan 03 #Python
python绘制雷达图实例讲解
Jan 03 #Python
python 使用xlsxwriter循环向excel中插入数据和图片的操作
Jan 01 #Python
python安装mysql的依赖包mysql-python操作
Jan 01 #Python
python UDF 实现对csv批量md5加密操作
Jan 01 #Python
安装python依赖包psycopg2来调用postgresql的操作
Jan 01 #Python
python matlab库简单用法讲解
Dec 31 #Python
You might like
PHP实现批量生成App各种尺寸Logo
2015/03/19 PHP
PHP概率计算函数汇总
2015/09/13 PHP
php实现表单多按钮提交action的处理方法
2015/10/24 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
2016/03/25 PHP
Laravel框架中Blade模板的用法示例
2017/08/30 PHP
jQuery $.each的用法说明
2010/03/22 Javascript
基于jquery的当鼠标滚轮到最底端继续加载新数据思路分享(多用于微博、空间、论坛 )
2011/10/10 Javascript
JavaScript中的Math 使用介绍
2014/04/21 Javascript
浅谈关于JavaScript API设计的一些建议和准则
2015/06/24 Javascript
jQuery添加删除DOM元素方法详解
2016/01/18 Javascript
thinkjs 文件上传功能实例代码
2017/11/08 Javascript
详解PHP后期静态绑定分析与应用
2018/03/21 Javascript
jQuery超简单遮罩层实现方法示例
2018/09/06 jQuery
vue 配置多页面应用的示例代码
2018/10/22 Javascript
在vue使用clipboard.js进行一键复制文本的实现示例
2019/01/15 Javascript
vue移动端模态框(可传参)的实现
2019/11/20 Javascript
JS轮播图的实现方法
2020/08/24 Javascript
将字典转换为DataFrame并进行频次统计的方法
2018/04/08 Python
python实现求两个字符串的最长公共子串方法
2018/07/20 Python
对python读写文件去重、RE、set的使用详解
2018/12/11 Python
python实现雪花飘落效果实例讲解
2019/06/18 Python
Python3的unicode编码转换成中文的问题及解决方案
2019/12/10 Python
css3实现一款模仿iphone样式的注册表单
2013/03/20 HTML / CSS
微信浏览器左上角返回按钮拦截功能
2017/11/21 HTML / CSS
美国名牌太阳镜折扣网站:Eyedictive
2017/05/15 全球购物
简述数组与指针的区别
2014/01/02 面试题
个人求职简历的自我评价范文
2013/10/09 职场文书
应聘护理专业毕业自荐书范文
2014/02/12 职场文书
小学学校门卫岗位职责
2014/08/03 职场文书
名人演讲稿范文
2014/09/16 职场文书
2014年语文教研组工作总结
2014/12/06 职场文书
婚礼新人答谢词
2015/01/04 职场文书
2015清明节祭奠英烈寄语大全
2015/03/04 职场文书
高中议论文(范文2篇)
2019/08/19 职场文书
大学生党员暑假实践(活动总结)
2019/08/21 职场文书
「回转企鹅罐」10周年纪念展「輪るピングドラム展」海报公开
2022/03/22 日漫