关于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 相关文章推荐
urllib2自定义opener详解
Feb 07 Python
跟老齐学Python之有容乃大的list(2)
Sep 15 Python
Python回调函数用法实例详解
Jul 02 Python
Python在Console下显示文本进度条的方法
Feb 14 Python
python嵌套字典比较值与取值的实现示例
Nov 03 Python
python实现excel读写数据
Mar 02 Python
Python 查看list中是否含有某元素的方法
Jun 27 Python
解决新版Pycharm中Matplotlib图像不在弹出独立的显示窗口问题
Jan 15 Python
python爬取cnvd漏洞库信息的实例
Feb 14 Python
django 环境变量配置过程详解
Aug 06 Python
使用Puppeteer爬取微信文章的实现
Feb 11 Python
python爬取股票最新数据并用excel绘制树状图的示例
Mar 01 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使用反向Ajax技术实现在线客服系统详解
2019/07/01 PHP
在 Laravel 中动态隐藏 API 字段的方法
2019/10/25 PHP
PHP基于phpqrcode类生成二维码的方法示例详解
2020/08/07 PHP
Javascript 闭包引起的IE内存泄露分析
2012/05/23 Javascript
JS异常处理的一个想法(sofish)
2013/03/14 Javascript
基于iframe实现类似于ajax的页面无刷新
2014/05/31 Javascript
javascript制作的滑动图片菜单
2015/05/15 Javascript
详细分析JavaScript变量类型
2015/07/08 Javascript
plupload+artdialog实现多平台上传文件
2016/07/19 Javascript
JavaScript学习笔记整理_关于表达式和语句
2016/09/19 Javascript
Angular指令封装jQuery日期时间插件datetimepicker实现双向绑定示例
2017/01/22 Javascript
为你的微信小程序体积瘦身详解
2017/05/20 Javascript
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
Vue学习笔记进阶篇之过渡状态详解
2017/07/14 Javascript
Node.js 的模块知识汇总
2017/08/16 Javascript
jQuery EasyUI开发技巧总结
2017/09/26 jQuery
Angular5中提取公共组件之radio list的实例代码
2018/07/10 Javascript
对layui中table组件工具栏的使用详解
2019/09/19 Javascript
微信小程序后端实现授权登录
2020/02/24 Javascript
[42:00]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第一场 12.13
2020/12/17 DOTA
pandas DataFrame实现几列数据合并成为新的一列方法
2018/06/08 Python
python解析多层json操作示例
2019/12/30 Python
深入浅析Python 函数注解与匿名函数
2020/02/24 Python
Python如何将函数值赋给变量
2020/04/28 Python
Python urllib request模块发送请求实现过程解析
2020/12/10 Python
CSS3教程(9):设置RGB颜色
2009/04/02 HTML / CSS
HTML5 manifest离线缓存的示例代码
2018/08/08 HTML / CSS
美国鞋类购物网站:Shiekh Shoes
2016/08/21 全球购物
解决方案设计综合面试题
2015/08/31 面试题
公司司机岗位职责
2014/02/07 职场文书
弘扬雷锋精神演讲稿
2014/05/10 职场文书
婚内房产协议书范本
2014/10/02 职场文书
一年级数学下册复习计划
2015/01/17 职场文书
老员工辞职信范文
2015/05/12 职场文书
幼儿园新生开学寄语
2015/05/27 职场文书
教师节表彰会主持词
2015/07/06 职场文书