关于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的迭代器和生成器
Jul 29 Python
python中实现迭代器(iterator)的方法示例
Jan 19 Python
Python 获得命令行参数的方法(推荐)
Jan 24 Python
Python模拟随机游走图形效果示例
Feb 06 Python
tensorflow输出权重值和偏差的方法
Feb 10 Python
Python使用matplotlib实现基础绘图功能示例
Jul 03 Python
Python 给定的经纬度标注在地图上的实现方法
Jul 05 Python
在Python中使用filter去除列表中值为假及空字符串的例子
Nov 18 Python
如何通过Django使用本地css/js文件
Jan 20 Python
基于Django OneToOneField和ForeignKey的区别详解
Mar 30 Python
python not运算符的实例用法
Jun 30 Python
利用Python实时获取steam特惠游戏数据
Jun 25 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
Get或Post提交值的非法数据处理
2006/10/09 PHP
php学习笔记 面向对象的构造与析构方法
2011/06/13 PHP
一组PHP可逆加密解密算法实例代码
2014/01/21 PHP
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法
2014/05/06 PHP
php原生数据库分页的代码实例
2019/02/18 PHP
JSON 和 JavaScript eval使用说明
2010/06/13 Javascript
原生js和jquery中有关透明度设置的相关问题
2014/01/08 Javascript
JavaScript设计模式之外观模式实例
2014/10/10 Javascript
js实现点击链接后窗口缩小并居中的方法
2015/03/02 Javascript
JavaScript 表单处理实现代码
2015/04/13 Javascript
jQuery基于扩展实现的倒计时效果
2016/05/14 Javascript
JS获取IE版本号与HTML设置IE文档模式的方法
2016/10/09 Javascript
vue2.0 axios前后端数据处理实例代码
2017/06/30 Javascript
javascript数组拍平方法总结
2018/01/20 Javascript
JS实现区分中英文并统计字符个数的方法示例
2018/06/09 Javascript
JS学习笔记之原型链和利用原型实现继承详解
2019/05/29 Javascript
详解Vue的watch中的immediate与watch是什么意思
2019/12/30 Javascript
JavaScript实现网页留言板功能
2020/11/23 Javascript
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS OG
2018/03/30 DOTA
Windows下安装python2和python3多版本教程
2017/03/30 Python
python如何读写csv数据
2018/03/21 Python
将python图片转为二进制文本的实例
2019/01/24 Python
Django创建一个后台的基本步骤记录
2020/10/02 Python
如何利用input事件来监听移动端的输入
2016/04/15 HTML / CSS
全球知名鞋履品牌授权零售商:Journeys
2016/09/17 全球购物
输入N,打印N*N矩阵
2012/02/20 面试题
普通简短的个人自我评价
2014/02/15 职场文书
元旦获奖感言
2014/03/08 职场文书
大学活动总结格式
2014/04/29 职场文书
小学雷锋月活动总结
2014/07/03 职场文书
查摆问题对照检查材料
2014/08/28 职场文书
维稳工作情况汇报
2014/10/27 职场文书
劳资员岗位职责
2015/02/13 职场文书
可可西里观后感
2015/06/08 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书