关于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基于mysql实现的简单队列以及跨进程锁实例详解
Jul 07 Python
Pycharm学习教程(1) 定制外观
May 02 Python
Python 稀疏矩阵-sparse 存储和转换
May 27 Python
Python使用win32com实现的模拟浏览器功能示例
Jul 13 Python
Python实现自动为照片添加日期并分类的方法
Sep 30 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
May 29 Python
Python 2.7中文显示与处理方法
Jul 16 Python
Python Django框架实现应用添加logging日志操作示例
May 17 Python
基于python实现的百度音乐下载器python pyqt改进版(附代码)
Aug 05 Python
Python的pygame安装教程详解
Feb 10 Python
Python求解排列中的逆序数个数实例
May 03 Python
如何用python实现一个HTTP连接池
Jan 14 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
require(),include(),require_once()和include_once()区别
2008/03/27 PHP
Laravel 自定命令以及生成文件的例子
2019/10/23 PHP
Javascript的表单与验证-非空验证
2016/03/18 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
2016/05/20 Javascript
jquery之别踩白块游戏的简单实现
2016/07/25 Javascript
AngularJS ng-blur 指令详解及简单实例
2016/07/30 Javascript
基于 Vue.js 之 iView UI 框架非工程化实践记录(推荐)
2017/11/21 Javascript
Vue动态生成el-checkbox点击无法赋值的解决方法
2019/02/21 Javascript
Ajax请求时无法重定向的问题解决代码详解
2019/06/21 Javascript
Angular单元测试之事件触发的实现
2020/01/20 Javascript
TypeScript 引用资源文件后提示找不到的异常处理技巧
2020/07/15 Javascript
基于javascript的无缝滚动动画1
2020/08/07 Javascript
原生js实现贪吃蛇游戏
2020/10/26 Javascript
如何使用 vue-cli 创建模板项目
2020/11/19 Vue.js
绘制微信小程序验证码功能的实例代码
2021/01/05 Javascript
Python函数嵌套实例
2014/09/23 Python
Python的批量远程管理和部署工具Fabric用法实例
2015/01/23 Python
使用Python的Tornado框架实现一个一对一聊天的程序
2015/04/25 Python
python通过openpyxl生成Excel文件的方法
2015/05/12 Python
初步讲解Python中的元组概念
2015/05/21 Python
python format 格式化输出方法
2018/07/16 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
2019/10/24 Python
python小程序基于Jupyter实现天气查询的方法
2020/03/27 Python
基于django 的orm中非主键自增的实现方式
2020/05/18 Python
CSS3的Flexbox布局的简明入门指南
2016/04/08 HTML / CSS
HTML5实现签到 功能
2018/10/09 HTML / CSS
英国户外服装品牌:Craghoppers
2019/04/25 全球购物
阿迪达斯越南官网:adidas越南
2020/07/19 全球购物
策划助理岗位职责
2013/11/18 职场文书
工作室成员个人发展规划范文
2014/01/24 职场文书
借款担保书范文
2014/05/13 职场文书
党员服务承诺书
2014/05/28 职场文书
国家领导干部党的群众路线教育实践活动批评与自我批评材料
2014/09/23 职场文书
2014年英语工作总结
2014/12/20 职场文书
本科毕业答辩开场白
2015/05/27 职场文书
django中websocket的具体使用
2022/01/22 Python