关于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 相关文章推荐
Django发送html邮件的方法
May 26 Python
教大家使用Python SqlAlchemy
Feb 12 Python
python 对给定可迭代集合统计出现频率,并排序的方法
Oct 18 Python
Python类装饰器实现方法详解
Dec 21 Python
python pandas库的安装和创建
Jan 10 Python
Python分支语句与循环语句应用实例分析
May 07 Python
Pytorch对Himmelblau函数的优化详解
Feb 29 Python
基于Python的一个自动录入表格的小程序
Aug 05 Python
Python 列表推导式需要注意的地方
Oct 23 Python
Python下载的11种姿势(小结)
Nov 18 Python
使用Python提取文本中含有特定字符串的方法示例
Dec 09 Python
Python实现提取PDF简历信息并存入Excel
Apr 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网站在线人数统计
2008/04/09 PHP
php学习笔记 数组遍历实现代码
2011/06/09 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
2013/11/07 PHP
php使用curl简单抓取远程url的方法
2015/03/13 PHP
PHP使用new StdClass()创建空对象的方法分析
2017/06/06 PHP
yii2.0整合阿里云oss上传单个文件的示例
2017/09/19 PHP
php实现微信分享朋友链接功能
2019/02/18 PHP
微信公众号之主动给用户发送消息功能
2019/06/22 PHP
php时间戳转换代码详解
2019/08/04 PHP
javascript下有关dom以及xml节点访问兼容问题
2007/11/26 Javascript
Javascript 事件流和事件绑定
2009/07/16 Javascript
基于jquery异步传输json数据格式实例代码
2013/11/23 Javascript
jQuery选择器用法实例详解
2015/12/17 Javascript
基于javascript实现动态显示当前系统时间
2016/01/28 Javascript
KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定
2016/10/11 Javascript
javaScript日期工具类DateUtils详解
2017/12/08 Javascript
Element UI框架中巧用树选择器的实现
2018/12/12 Javascript
vue 导航内容设置选中状态样式的例子
2019/11/01 Javascript
python中urllib模块用法实例详解
2014/11/19 Python
python实现RSA加密(解密)算法
2016/02/17 Python
Python版名片管理系统
2018/11/30 Python
python中的句柄操作的方法示例
2019/06/20 Python
python 标准差计算的实现(std)
2019/07/29 Python
利用python实现短信和电话提醒功能的例子
2019/08/08 Python
python sklearn常用分类算法模型的调用
2019/10/16 Python
python使用ctypes调用扩展模块的实例方法
2020/01/28 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
2020/11/17 Python
用CSS3实现背景渐变的方法
2015/07/14 HTML / CSS
6PM官网:折扣鞋、服装及配饰
2018/08/03 全球购物
华为python面试题
2016/05/03 面试题
党的群众路线教育实践活动通讯稿
2014/09/10 职场文书
党员个人批评与自我批评
2014/10/14 职场文书
实习报告怎么写
2019/06/20 职场文书
解决Pytorch半精度浮点型网络训练的问题
2021/05/24 Python
Django与数据库交互的实现
2021/06/03 Python
Jupyter Notebook内使用argparse报错的解决方案
2021/06/03 Python