关于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 相关文章推荐
vc6编写python扩展的方法分享
Jan 17 Python
python海龟绘图实例教程
Jul 24 Python
Python2中的raw_input() 与 input()
Jun 12 Python
Python用模块pytz来转换时区
Aug 19 Python
分享给Python新手们的几道简单练习题
Sep 21 Python
python cs架构实现简单文件传输
Mar 20 Python
在spyder IPython console中,运行代码加入参数的实例
Apr 20 Python
Python嵌入C/C++进行开发详解
Jun 09 Python
Python 连接 MySQL 的几种方法
Sep 09 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
Sep 23 Python
Python模块常用四种安装方式
Oct 20 Python
python 实现的车牌识别项目
Jan 25 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的ob_start();控制您的浏览器cache!
2006/11/25 PHP
php常见的魔术方法详解
2014/12/25 PHP
php判断两个浮点数是否相等的方法
2015/03/14 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
2019/04/04 PHP
Javascript 学习书 推荐
2009/06/13 Javascript
Javascript自定义函数判断网站访问类型是PC还是移动终端
2014/01/10 Javascript
SeaJS入门教程系列之使用SeaJS(二)
2014/03/03 Javascript
JavaScript截取字符串的Slice、Substring、Substr函数详解和比较
2014/03/20 Javascript
js读取cookie方法总结
2014/10/31 Javascript
js实现同一页面可多次调用的图片幻灯切换效果
2015/02/28 Javascript
浅谈addEventListener和attachEvent的区别
2016/07/14 Javascript
bootstrap laydate日期组件使用详解
2017/01/04 Javascript
微信小程序methods中定义的方法互相调用的实例代码
2018/08/07 Javascript
详解如何用VUE写一个多用模态框组件模版
2018/09/27 Javascript
VUE实现吸底按钮
2021/03/04 Vue.js
python snownlp情感分析简易demo(分享)
2017/06/04 Python
对python字典过滤条件的实例详解
2019/01/22 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
2019/06/19 Python
python实现提取COCO,VOC数据集中特定的类
2020/03/10 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
2020/06/30 Python
Python操作Elasticsearch处理timeout超时
2020/07/17 Python
html5使用canvas画空心圆与实心圆
2014/12/15 HTML / CSS
阿拉伯世界最大的电子卖场:Souq埃及
2016/08/01 全球购物
美国著名手表网站:Timepiece
2017/11/15 全球购物
美国汽车轮胎和轮毂销售网站:Tire Rack
2018/01/11 全球购物
TripAdvisor印尼站:全球领先的旅游网站
2018/03/15 全球购物
Melissa鞋马来西亚官方网站:MDreams马来西亚
2018/04/05 全球购物
一个精品风格的世界:Atterley
2019/05/01 全球购物
Waterford英国官方网站:世界上最受欢迎的优质水晶品牌
2019/08/17 全球购物
世嘉游戏英国官方商店:SEGA Shop UK
2019/09/20 全球购物
项目合作计划书
2014/01/09 职场文书
校长寄语大全
2014/04/09 职场文书
个人学习总结范文
2015/02/15 职场文书
团结主题班会
2015/08/13 职场文书
Pytorch中expand()的使用(扩展某个维度)
2022/07/15 Python
win7配置本地ftp服务器的图文教程
2022/08/05 Servers