python 重试—retry库的使用和自定义超时retry
2021/8/3 12:36:31
本文主要是介绍python 重试—retry库的使用和自定义超时retry,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
python 重试—retry库的使用和自定义超时retry
- 引言
- retry 库
- 安装
- 使用
- 参数说明
- 自定义retry
引言
当我们写代码自动化测试代码时,由于页面读取、数据刷新等造成的页面元素不稳定,经常需要在执行出错时进行重试,但是对每一个方法都做一个异常处理加重试的话,又会造成代码冗余的情况,DRY(Don’t repeat yourself),这时,可以将重试的逻辑写成装饰器,而这已经有人写好,作为第三方库可以直接使用了,那就是retry。
retry 库
安装
pip install retry
使用
from retry import retry @retry() def make_trouble(): '''重试直到成功''' @retry(ZeroDivisionError, tries=3, delay=2) def make_trouble(): '''出现ZerodivisionError时重试,在3次重试失败后抛出错误,重试间隔2秒''' @retry((ValueError, TypeError), delay=1, backoff=2) def make_trouble(): '''出现ValueError或TypeError时重试,重试间隔1,2,4,8...秒,直至执行成功''' @retry((ValueError, TypeError), delay=1, backoff=2, max_delay=4) def make_trouble(): '''出现valueError或TypeError时重试,重试间隔1,2,4,4...秒,直至执行成功''' @retry(ValueError, delay=1, jitter=1) def make_trouble(): '''出现ValueError时重试,重试间隔1,2,3,4...秒,直至执行成功'''
参数说明
def retry(exceptions=Exception, tries=-1, delay=0, max_delay=None, backoff=1, jitter=0, logger=logging_logger): """ :param exceptions: 需要捕获的异常,当发生该异常时进行重试,需捕获多种异常时可以使用元组,默认为Exception. :param tries: 最大重试次数,默认为-1(无限制) :param delay: 初始时间间隔,重试前的等待时间,默认为0 :param max_delay: 最大时间间隔,默认为None(无限制) :param backoff: 时间间隔系数,每次重试将上一次的重试时间乘以该值作为本次间隔时间,默认为1 :param jitter: 额外的等待时间,每次重试将上一次的时间间隔计算backoff后再加上该值,默认为0,需要随机时可以使用元组(最小值, 最大值) :param logger: 发生重试时记录日志的日志句柄,默认为retry.logging_logger,如果为None, 则不记录日志 """
自定义retry
retry库基本上可以覆盖我们大部分的重试需求了,但是它只能给我们提供基于重试次数的限制,如果我们想要基于超时时间的重试,比如在30秒内发生的错误进行重试,它就不行了,需要我们自己来实现,我在下面提供了一个基础版的样例,想要达到retry库的丰富的配置,可以自己进行扩展
import time from decorator import decorator from loguru import logger @decorator def retry(func, *args, **kwargs): end_time = time.time() + 30 while True: try: return func(*args, **kwargs) except Exception as e: timeout = end_time - time.time() * 1000 if timeout <= 0: logger.exception(f'timeout is arrived, raise') raise e logger.warning(f'timeout still remain {timeout} ms, retry...')
这篇关于python 重试—retry库的使用和自定义超时retry的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-20Python编程入门指南
- 2024-12-20Python编程基础与进阶
- 2024-12-19Python基础编程教程
- 2024-12-19python 文件的后缀名是什么 怎么运行一个python文件?-icode9专业技术文章分享
- 2024-12-19使用python 把docx转为pdf文件有哪些方法?-icode9专业技术文章分享
- 2024-12-19python怎么更换换pip的源镜像?-icode9专业技术文章分享
- 2024-12-19Python资料:新手入门的全面指南
- 2024-12-19Python股票自动化交易实战入门教程
- 2024-12-19Python股票自动化交易入门教程
- 2024-12-18Python量化入门教程:轻松掌握量化交易基础知识