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() + 30while True:try:return func(*args, **kwargs)except Exception as e:timeout = end_time - time.time() * 1000if timeout <= 0:logger.exception(f'timeout is arrived, raise')raise elogger.warning(f'timeout still remain {timeout} ms, retry...')

python 重试—retry库的使用和自定义超时retry相关推荐

  1. Python重试库Retrying和Tenacity

    文章目录 简介 安装 Retrying 初试 最大重试次数 最大重试时间 重试间隔 随机间隔 指数级重试间隔 自定义异常重试 自定义返回重试 参数 Tenacity 初试 最大重试次数 最大重试时间 ...

  2. 【python】python爬虫requests库详解

    1.安装:pip install requests 简介:Requests是一个优雅而简单的Python HTTP库,与之前的urllibPython的标准库相比,Requests的使用方式非常的简单 ...

  3. 怎么装python的keras库_matlab调用keras深度学习模型(环境搭建)

    matlab没有直接调用tensorflow模型的接口,但是有调用keras模型的接口,而keras又是tensorflow的高级封装版本,所以就研究一下这个--可以将model-based方法和le ...

  4. python常用标准库有哪些-Python开发中常用的标准库

    大多数基于 Python 开发的应用程序都会用到本地标准库和三方库,这样不仅能让我们把时间去关注真正的业务开发,也能学习到更多价值含量高的程序设计和开发思想.程序开发中有一句著名的话叫做: Don't ...

  5. python拼音怎么写-Python 中拼音库 PyPinyin 的用法

    [摘要] 最近碰到了一个问题,项目中很多文件都是接手过来的中文命名的一些素材,结果在部署的时候文件名全都乱码了,导致项目无法正常运行. 后来请教了一位大佬怎么解决文件名乱码的问题,他说这个需要正面解决 ...

  6. Py之Pandas:Python的pandas库简介、安装、使用方法详细攻略

    Py之Pandas:Python的pandas库简介.安装.使用方法详细攻略 目录 pandas库简介 pandas库安装 pandas库使用方法 1.函数使用方法 2.使用经验总结 3.绘图相关操作 ...

  7. python数据分析第三方库是_python数据分析复盘——数据分析相关库之Pandas

    编辑推荐: 本文来源csdn,本文主要对Python的第三方库Pandas,进行高性能易用数据类型和分析. 1.Pandas 简介 1.1 pandas是什么 Pandas是Python第三方库,提供 ...

  8. python自然语言处理库_Python自然语言处理工具库(含中文处理)

    自然语言处理(Natural Language Processing,简称 NLP),是研究计算机处理人类语言的一门技术.随着深度学习在图像识别.语音识别领域的大放异彩,人们对深度学习在 NLP 的价 ...

  9. python的所有库_Python 常用库

    前言 之前重写了视频字符画处理的代码,然后这两天又在研究命令行和网络.读了一点开源工具的代码,越来越觉得有必要针对性地学习一下一些重要的基础库. 这里呢就列个小清单,把我认为有必要学习的库写一下. 带 ...

最新文章

  1. XML Json
  2. VC中使用低级音频函数WaveX播放声音文件
  3. 聚类算法教程(3):层次聚类算法Hierarchical Clustering Algorithms
  4. tcp/ip协议listen函数中backlog参数的含义
  5. 【医学图像分割】 基于matlab GVF算法医学图像分割【含Matlab源码 1213期】
  6. SCRT软件的使用教程
  7. Fiddler的使用介绍及抓包分析(详解)
  8. 在线matlab,web版,还是挺好用的
  9. 打开计算机系统无法访问指定的,win10系统运行软件时提示“无法访问指定设备路径或文件的修复步骤...
  10. android Launcher 自定义View 高仿hola一键清理效果
  11. netty报错:远程主机强迫关闭了一个现有的连接。(已解决)
  12. Dlib模型之驾驶员疲劳检测总结(可视化界面)
  13. history 路由 vs hash 路由 vs location.href 实现跳转
  14. 腾讯跟阿里两位王者之间的对比
  15. 异地备份工具_5个有用的Amazon S3备份工具
  16. java调用CMD完成文件复制
  17. [翻译]WP 平衡球游戏开发教程(三) -DebugDraw(XNA渲染)
  18. java的大o_学习算法前你需要了解的‘大O表示法’
  19. 对反病毒产品你应该知道的几个事实
  20. 计算机会计学试卷答案,首都经济贸易大学200X年计算机会计学期末考试试题.doc...

热门文章

  1. 使用汽车VIN码识别的好处有哪些
  2. 北京新世纪计算机学校地,石家庄新世纪电脑学校
  3. 图神经网络模型—PATCHY-SAN的基本思想与流程
  4. ffmpeg 转换flv压缩大小_视频压缩工具ffmpeg的使用
  5. mongodb java 内嵌文档_MongoDB 内嵌文档
  6. springcloud为什么关闭了bus还是会连接mq
  7. 在Ubuntu20.04运行VINS-Fusion
  8. 导览讲解 | 二维码语音讲解有什么优势?
  9. 前端实现对ZIP 压缩文件解压,实现前端直接展示结果,比如图片,压缩包等 audio对象进行播放
  10. 制造业工厂需要关注的工业物联网解决方案