关于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 相关文章推荐
用ReactJS和Python的Flask框架编写留言板的代码示例
Dec 19 Python
在python3.5中使用OpenCV的实例讲解
Apr 02 Python
python实现二维数组的对角线遍历
Mar 02 Python
Django框架视图函数设计示例
Jul 29 Python
对python中的os.getpid()和os.fork()函数详解
Aug 08 Python
基于pytorch的保存和加载模型参数的方法
Aug 17 Python
python实现字符串和数字拼接
Mar 02 Python
在jupyter notebook 添加 conda 环境的操作详解
Apr 10 Python
Pycharm插件(Grep Console)自定义规则输出颜色日志的方法
May 27 Python
keras实现多种分类网络的方式
Jun 11 Python
keras 指定程序在某块卡上训练实例
Jun 22 Python
Django实现drf搜索过滤和排序过滤
Jun 21 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
Thinkphp的volist标签嵌套循环使用教程
2014/07/08 PHP
destoon首页调用求购供应信息的地区名称的方法
2014/08/21 PHP
codeigniter显示所有脚本执行时间的方法
2015/03/21 PHP
PHP简单生成缩略图相册的方法
2015/07/29 PHP
简单介绍PHP非阻塞模式
2016/03/03 PHP
PHP简单获取网站百度搜索和搜狗搜索收录量的方法
2016/08/23 PHP
PHP版单点登陆实现方案的实例
2016/11/17 PHP
Linux下 php7安装redis的方法
2018/11/01 PHP
Javascript 日期对象Date扩展方法
2009/05/30 Javascript
jQuery判断复选框是否勾选的原理及示例
2014/05/21 Javascript
jQuery中ajax的load()方法用法实例
2014/12/26 Javascript
jQuery表单域选择器用法分析
2015/02/10 Javascript
JavaScript在form表单中使用button按钮实现submit提交方法
2017/01/23 Javascript
超简单的Vue.js环境搭建教程
2017/03/17 Javascript
详解vue 数据传递的方法
2018/04/19 Javascript
vue移动端微信授权登录插件封装的实例
2018/08/28 Javascript
vue.js 子组件无法获取父组件store值的解决方式
2019/11/08 Javascript
JS判断浏览器类型与操作系统的方法分析
2020/04/30 Javascript
Vue 中如何将函数作为 props 传递给组件的实现代码
2020/05/12 Javascript
[40:19]2018完美盛典CS.GO表演赛
2018/12/17 DOTA
Python实现批量执行同目录下的py文件方法
2019/01/11 Python
python线程的几种创建方式详解
2019/08/29 Python
python sqlite的Row对象操作示例
2019/09/11 Python
python程序中的线程操作 concurrent模块使用详解
2019/09/23 Python
Python enumerate() 函数如何实现索引功能
2020/06/29 Python
Python 用__new__方法实现单例的操作
2020/12/11 Python
缅甸网上购物:Shop.com.mm
2017/12/05 全球购物
英国假发网站:Hothair
2018/02/23 全球购物
门卫班长岗位职责
2013/12/15 职场文书
薪酬专员岗位职责
2014/02/18 职场文书
文明村创建实施方案
2014/03/27 职场文书
勾股定理课后反思
2014/04/26 职场文书
人事任命书格式
2014/06/05 职场文书
垃圾桶标语
2014/06/24 职场文书
爱国电影观后感
2015/06/19 职场文书
python实战之一步一步教你绘制小猪佩奇
2021/04/22 Python