关于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中PDB模块中的命令来调试Python代码的教程
Mar 30 Python
详解python string类型 bytes类型 bytearray类型
Dec 16 Python
简述Python2与Python3的不同点
Jan 21 Python
python Pandas 读取txt表格的实例
Apr 29 Python
python 列表降维的实例讲解
Jun 28 Python
Python读写文件基础知识点
Jun 10 Python
关于Python中的向量相加和numpy中的向量相加效率对比
Aug 26 Python
关于Flask项目无法使用公网IP访问的解决方式
Nov 19 Python
Python中实现输入超时及如何通过变量获取变量名
Jan 18 Python
Django如何使用jwt获取用户信息
Apr 21 Python
将python字符串转化成长表达式的函数eval实例
May 11 Python
python 爬虫如何实现百度翻译
Nov 16 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
全国FM电台频率大全 - 27 陕西省
2020/03/11 无线电
用PHP实现文件上传二法
2006/10/09 PHP
关于PHP堆栈与列队的学习
2013/06/21 PHP
如何使用PHP实现javascript的escape和unescape函数
2013/06/29 PHP
帝国cms常用标签汇总
2015/07/06 PHP
PHP手机短信验证码实现流程详解
2018/05/17 PHP
JQuery Ajax通过Handler访问外部XML数据的代码
2010/06/01 Javascript
jquery怎样实现ajax联动框(一)
2013/03/08 Javascript
仿谷歌主页js动画效果实现代码
2013/07/14 Javascript
JS获取网页图片name属性的方法
2015/04/01 Javascript
JavaScript实现简单图片翻转的方法
2015/04/17 Javascript
AngularJS中的指令全面解析(必看)
2016/05/20 Javascript
jquery删除table当前行的实例代码
2016/10/07 Javascript
javascript完美实现给定日期返回上月日期的方法
2017/06/15 Javascript
解决vue中监听input只能输入数字及英文或者其他情况的问题
2018/08/30 Javascript
JS实现可视化音频效果的实例代码
2020/01/16 Javascript
Vue执行方法,方法获取data值,设置data值,方法传值操作
2020/08/05 Javascript
解决python写的windows服务不能启动的问题
2014/04/15 Python
对python3.4 字符串转16进制的实例详解
2019/06/12 Python
python conda操作方法
2019/09/11 Python
python获取array中指定元素的示例
2019/11/26 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
2020/01/12 Python
Python使用Pandas库常见操作详解
2020/01/16 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
2020/02/11 Python
python实现人脸签到系统
2020/04/13 Python
django正续或者倒序查库实例
2020/05/19 Python
Python中Selenium模块的使用详解
2020/10/09 Python
Python调用ffmpeg开源视频处理库,批量处理视频
2020/11/16 Python
域名注册、建站工具、网页主机、SSL证书:Dynadot
2017/01/06 全球购物
三查三看党性分析材料
2014/02/18 职场文书
工程质量保证书
2015/05/09 职场文书
2019大学毕业晚会主持词
2019/06/21 职场文书
创业计划书之零食店(进口)
2019/09/24 职场文书
在SQL Server中使用 Try Catch 处理异常的示例详解
2022/07/15 SQL Server
如何使用注解方式实现 Redis 分布式锁
2022/07/23 Redis
Java Redisson多策略注解限流
2022/09/23 Java/Android