关于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 25 Python
Python使用defaultdict读取文件各列的方法
May 11 Python
Python中django学习心得
Dec 06 Python
python类的方法属性与方法属性的动态绑定代码详解
Dec 27 Python
详解Django+Uwsgi+Nginx的生产环境部署
Jun 25 Python
python cs架构实现简单文件传输
Mar 20 Python
numpy添加新的维度:newaxis的方法
Aug 02 Python
python3对接mysql数据库实例详解
Apr 30 Python
Python-Tkinter Text输入内容在界面显示的实例
Jul 12 Python
使用虚拟环境打包python为exe 文件的方法
Aug 29 Python
python3获取url文件大小示例代码
Sep 18 Python
基于注解实现 SpringBoot 接口防刷的方法
Mar 02 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旋转图片90度的方法
2013/11/07 PHP
PHP中提问频率最高的11个面试题和答案
2014/09/02 PHP
PHP读取txt文本文件并分页显示的方法
2015/03/11 PHP
PHP实现的QQ空间g_tk加密算法
2015/07/09 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
2017/06/20 PHP
PHP简单实现二维数组的矩阵转置操作示例
2017/11/24 PHP
PHP的mysqli_stat()函数讲解
2019/01/23 PHP
javascript 中对象的继承〔转贴〕
2007/01/22 Javascript
checkbox 复选框不能为空
2009/07/11 Javascript
JavaScript Object的extend是一个常用的功能
2009/12/02 Javascript
js函数返回多个返回值的示例代码
2013/11/05 Javascript
给ListBox添加双击事件示例代码
2013/12/02 Javascript
fixedBox固定div漂浮代码支持ie6以上大部分主流浏览器
2014/06/26 Javascript
详解JavaScript的策略模式编程
2015/06/24 Javascript
详解vue.js全局组件和局部组件
2017/04/10 Javascript
自定义vue组件发布到npm的方法
2018/05/09 Javascript
JavaScript实现预览本地上传图片功能完整示例
2019/03/08 Javascript
JS实现数组删除指定元素功能示例
2019/06/05 Javascript
layui表单验证select下拉框实现验证的方法
2019/09/05 Javascript
中级前端工程师必须要掌握的27个JavaScript 技巧(干货总结)
2019/09/23 Javascript
JavaScript事件冒泡机制原理实例解析
2020/01/14 Javascript
基于JS+HTML实现弹窗提示是否确认提交功能
2020/06/17 Javascript
vue 数据操作相关总结
2020/12/17 Vue.js
[02:23]1个至宝=115个英雄特效 最“绿”至宝拉比克“魔导师密钥”登场
2018/12/29 DOTA
python通过字典dict判断指定键值是否存在的方法
2015/03/21 Python
Python中的super用法详解
2015/05/28 Python
Python列表删除的三种方法代码分享
2017/10/31 Python
利用Python批量提取Win10锁屏壁纸实战教程
2018/03/27 Python
Linux下python3.7.0安装教程
2018/07/30 Python
python 实现音频叠加的示例
2020/10/29 Python
蔻驰意大利官网:COACH意大利
2019/01/16 全球购物
群众路线学习心得体会范文
2014/11/05 职场文书
生日答谢词
2015/01/05 职场文书
学习焦裕禄先进事迹心得体会
2016/01/23 职场文书
Pytorch中使用ImageFolder读取数据集时忽略特定文件
2022/03/23 Python
uniapp 微信小程序 自定义tabBar 导航
2022/04/22 Javascript