关于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实现好友全头像的拼接实例(推荐)
Jun 24 Python
Python实现登录接口的示例代码
Jul 21 Python
Python基础学习之常见的内建函数整理
Sep 06 Python
Windows 7下Python Web环境搭建图文教程
Mar 20 Python
CentOS 7 安装python3.7.1的方法及注意事项
Nov 01 Python
详解python之heapq模块及排序操作
Apr 04 Python
Python使用线程来接收串口数据的示例
Jul 02 Python
opencv-python 读取图像并转换颜色空间实例
Dec 09 Python
django model的update时auto_now不被更新的原因及解决方式
Apr 01 Python
基于Python脚本实现邮件报警功能
May 20 Python
Python使用文件操作实现一个XX信息管理系统的示例
Jul 02 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
Oct 15 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投票程序源码
2007/03/11 PHP
Drupal读取Excel并导入数据库实例
2014/03/02 PHP
PHP图片裁剪函数(保持图像不变形)
2014/05/04 PHP
php 5.6版本中编写一个PHP扩展的简单示例
2015/01/20 PHP
大家在抢红包,程序员在研究红包算法
2015/08/31 PHP
PHP会员找回密码功能的简单实现
2016/09/05 PHP
php array_merge_recursive 数组合并
2016/10/26 PHP
详解PHP发送邮件知识点
2018/05/06 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
php使用array_chunk函数将一个数组分割成多个数组
2018/12/05 PHP
JavaScript打字小游戏代码
2011/12/26 Javascript
JavaScript动态添加列的方法
2015/03/25 Javascript
jQuery在线选座位插件seat-charts特效代码分享
2015/08/27 Javascript
JS实现超精简响应鼠标显示二级菜单代码
2015/09/12 Javascript
JavaScript中数组的合并以及排序实现示例
2015/10/24 Javascript
BootStrap智能表单demo示例详解
2016/06/13 Javascript
JS获取随机数和时间转换的简单实例
2016/07/10 Javascript
javascript另类方法实现htmlencode()与htmldecode()函数实例分析
2016/11/17 Javascript
常用的javascript设计模式
2017/01/11 Javascript
vue 详情跳转至列表页实现列表页缓存
2019/03/27 Javascript
原生js实现轮播图特效
2020/05/04 Javascript
node.js +mongdb实现登录功能
2020/06/18 Javascript
python正则表达式面试题解答
2020/04/28 Python
python操作xlsx文件的包openpyxl实例
2018/05/03 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
2018/10/18 Python
浅谈PyQt5 的帮助文档查找方法,可以查看每个类的方法
2019/06/25 Python
Django框架之DRF 基于mixins来封装的视图详解
2019/07/23 Python
使用Python paramiko模块利用多线程实现ssh并发执行操作
2019/12/05 Python
PyCharm无法识别PyQt5的2种解决方法,ModuleNotFoundError: No module named 'pyqt5'
2020/02/17 Python
推荐10个HTML5响应式框架
2016/02/25 HTML / CSS
利用三角函数在canvas上画虚线的方法
2018/01/11 HTML / CSS
违纪检讨书2000字
2014/02/08 职场文书
学生检讨书怎么写
2014/10/09 职场文书
2015年仓库管理员工作总结
2015/04/21 职场文书
门面租赁合同范文
2019/08/06 职场文书
使用python创建股票的时间序列可视化分析
2022/03/03 Python