关于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实现根据指定端口探测服务器/模块部署的方法
Aug 25 Python
一些Python中的二维数组的操作方法
May 02 Python
解决python2.7用pip安装包时出现错误的问题
Jan 23 Python
python基础_文件操作实现全文或单行替换的方法
Sep 04 Python
python语音识别实践之百度语音API
Aug 30 Python
python重试装饰器的简单实现方法
Jan 31 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
Mar 14 Python
使用pandas的box_plot去除异常值
Dec 10 Python
django中cookiecutter的使用教程
Dec 03 Python
python中os.path.join()函数实例用法
May 26 Python
python随机打印成绩排名表
Jun 23 Python
Python编程源码报错解决方法总结经验分享
Oct 05 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调用Oracle存储过程
2006/10/09 PHP
php实现curl模拟ftp上传的方法
2015/07/29 PHP
搭建PhpStorm+PhpStudy开发环境的超详细教程
2020/09/17 PHP
JavaScript 指导方针
2007/04/05 Javascript
Mootools 1.2教程 Fx.Morph、Fx选项和Fx事件
2009/09/15 Javascript
使用js 设置url参数
2013/07/08 Javascript
使用js判断TextBox控件值改变然后出发事件
2014/03/07 Javascript
jquery 取子节点及当前节点属性值的方法
2014/08/24 Javascript
javascript中callee与caller的区别分析
2015/04/20 Javascript
js实现超简单的展开、折叠目录代码
2015/08/28 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
一个极为简单的requirejs实现方法
2016/10/20 Javascript
Javacript中自定义的map.js  的方法
2017/11/26 Javascript
JS将网址url转化为JSON格式的方法
2018/07/02 Javascript
vue-better-scroll 的使用实例代码详解
2018/12/03 Javascript
详解vue-element Tree树形控件填坑路
2019/03/26 Javascript
微信小程序页面传多个参数跳转页面的实现方法
2019/05/17 Javascript
Vue vm.$attrs使用场景详解
2020/03/08 Javascript
工作中常用js功能汇总
2020/11/07 Javascript
[03:14]2014DOTA2西雅图国际邀请赛 EG战队巡礼
2014/07/07 DOTA
Python类的用法实例浅析
2015/05/27 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
2020/02/17 Python
Django项目uwsgi+Nginx保姆级部署教程实现
2020/04/19 Python
Python字典实现伪切片功能
2020/10/28 Python
使用Python获取爱奇艺电视剧弹幕数据的示例代码
2021/01/12 Python
小程序瀑布流解决左右两边高度差距过大的问题
2019/02/20 HTML / CSS
GIVENCHY纪梵希官方旗舰店:高定彩妆与贵族护肤品
2018/04/16 全球购物
精细化工应届生求职信
2013/11/17 职场文书
给民警的表扬信
2014/01/08 职场文书
致跳远、跳高运动员广播稿
2014/01/09 职场文书
家长给幼儿园的表扬信
2014/01/09 职场文书
环保建议书600字
2014/05/14 职场文书
建筑工程技术专业求职信
2014/07/16 职场文书
三峡人家导游词
2015/01/31 职场文书
Python字符串格式化方式
2022/04/07 Python
virtualenv隔离Python环境的问题解析
2022/06/21 Python