0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Python中retrying库的有参数重试

麦辣鸡腿堡 来源:Python都知道 作者:了不起 2023-11-14 11:08 次阅读

参数重试

(1)stop_max_attempt_number

在retry中传入stop_max_attempt_number参数后可以指定失败重试的次数

@retry(stop_max_attempt_number=2)
def func():
    print(f"记录失败重试")
    for item in range(0,100):
        result=item / 0
        print(result)
        return result

func()

因为这里我们指定了失败后进行两次重试,如果重试执行两次后还是报错则结束重试,将错误信息抛出来。

图片

**(2)wait_fixed**传入wati_fixed后,可以指定重试的时间

from retrying import retry
import time

# 设置三秒重试一次
@retry(wait_fixed=3000)  
def func():
    print(f"记录失败重试:",time.strftime("%Y-%m-%d %H:%M:%S"))

    result=1 / 0
    print(result)
    return result

func()

图片

配置重试间隔时间后,成语遇到执行失败或者报错后,就会根据设置的重试时间去进行重试执行

(3)wait_random_minwait_random_max

通常wait_random_min和wait_random_max是一起搭配使用的,可以设置一个重试等待的时间,然后会在设置的时间区间内随机取一个等待时间进行重试

from retrying import retry
import time


@retry(wait_random_min=1000,wait_random_max=9000)
def func():
    print(f"记录失败重试:",time.strftime("%Y-%m-%d %H:%M:%S"))

    result=1 / 0
    print(result)
    return result

func()

图片

(4)wait_exponential_multiplierwait_exponential_max

官方解释为:以指数的形式产生两次retrying之间的停留时间, 产生的值为2^previous_attempt_number * wait_exponential_multiplier, previous_attempt_number是前面已经retry的次数, 如果产生的这个值超过了wait_exponential_max的大小, 那么之后两个retrying之间的停留值都为wait_exponential_max

通俗来点讲就是每次重试的时间以wait_exponential_multiplier设置的值2,如果重试后还是失败则继续2,直到最后的值等于或则超过wait_exponential_max设置的值后,后面的每一次重试等待时间都是wait_exponential_max设置的值

from retrying import retry
import time

@retry(wait_exponential_multiplier=1000,wait_exponential_max=10000)
def func():
    print(f"记录失败重试:",time.strftime("%Y-%m-%d %H:%M:%S"))

    result=1 / 0
    print(result)
    return result

func()

图片

(5)wait_func

在前面介绍的参数都是如何配置失败冲重试的等待时间或者重试次数之类的,但是我们不能时时刻刻盯着程序,在程序代码发生错误时我们应该要进行发送短信或者邮件之类的提醒才行

在这里就可以使用到wait_func参数,它接收一个可执行函数,返回一个具体的间隔时间数值,单位ms。接收的函数须接收两个参数:attempt_number当前运行次数,delay_since_first_attempt_ms当前重试机制运行时间(单位ms)

from retrying import retry
import time


def func_demo(attempt_number,delay_since_first_attempt_ms):
    print("函数运行失败后运行该函数")

    if attempt_number == 5:
        print("已经重试失败五次了,开始准备发送提醒")

    if attempt_number == 10:
        print("已经重试失败超10次了,发送邮件给相关人员紧急处理")

    if attempt_number  >10:
        print("重试时间过长,做一些其他临时方案进行补救")

    # return一个重试的时间
    return 2000


@retry(wait_func=func_demo)
def func():
    print(f"记录失败重试:",time.strftime("%Y-%m-%d %H:%M:%S"))

    result=1 / 0

    return result

func()

图片

使用wait_func通过调用其他可执行的函数,我们可以借助它来做一些临时的补救措施,避免程序一直无法运行而产生的影响。

(6)其他参数

在retry中还存在有很多参数,有兴趣的小伙伴可以去详细了解下

图片

  • stop_max_attempt_number:在停止之前尝试的最大次数,最后一次如果还是有异常则会抛出异常,停止运行,默认为5次
  • stop_max_delay:最大延迟时间,大概意思就是:如果调用的函数出现异常,那么就会重复调用这个函数,最大调用时间,默认为100毫秒
  • wait_fixed:两次调用方法期间停留时长, 如果出现异常则会一直重复调用,默认 1000毫秒
  • wait_random_min:在两次调用方法停留时长,停留最短时间,默认为0
  • wait_random_max:在两次调用方法停留时长,停留最长时间,默认为1000毫秒
  • wait_incrementing_increment:每调用一次则会增加的时长,默认 100毫秒
  • wait_exponential_multiplierwait_exponential_max:以指数的形式产生两次「retrying」之间的停留时间,产生的值为2^previous_attempt_number * wait_exponential_multiplier,previous_attempt_number是前面已经「retry」的次数,如果产生的这个值超过了wait_exponential_max的大小,那么之后两个「retrying」之间的停留值都为wait_exponential_max
  • retry_on_exception: 指定一个函数,如果此函数返回指定异常,则会重试,如果不是指定的异常则会退出
  • retry_on_result:指定一个函数,如果指定的函数返回True,则重试,否则抛出异常退出
  • wrap_exception:参数设置为True/False,如果指定的异常类型,包裹在RetryError中,会看到RetryError和程序抛的Exception error
  • stop_func: 每次抛出异常时都会执行的函数,如果和stop_max_delay、stop_max_attempt_number配合使用,则后两者会失效 (指定的stop_func会有两个参数:attempts, delay)
  • wait_func:和stop_func用法差不多。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据库
    +关注

    关注

    7

    文章

    3793

    浏览量

    64340
  • 函数
    +关注

    关注

    3

    文章

    4326

    浏览量

    62558
  • python
    +关注

    关注

    56

    文章

    4792

    浏览量

    84618
收藏 人收藏

    评论

    相关推荐

    常用Python那些38个常用Python的详细概述

    Python作为一个设计优秀的程序语言,现在已广泛应用于各种领域,依靠其强大的第三方类Python在各个领域都能发挥巨大的作用。
    的头像 发表于 11-03 10:28 3.1w次阅读

    ADM1266 Python

    ADM1266 Python
    发表于 03-23 15:47 1次下载
    ADM1266 <b class='flag-5'>Python</b><b class='flag-5'>库</b>

    详解Python的Pandas和Numpy

    pandas、numpy是Python数据科学中非常常用的,numpy是Python的数值计算扩展,专门用来处理矩阵,它的运算效率比列表更高效。
    的头像 发表于 05-25 12:49 2561次阅读

    如何在RocketMQ合理使用重试机制

    RocketMQ 的重试机制包括三部分,分别是生产者重试,服务端内部数据复制遇到非预期问题时重试,消费者消费重试
    的头像 发表于 11-23 10:15 1118次阅读

    如何安装常用Python

    Python作为一种流行的编程语言,拥有丰富的第三方资源,这些可以帮助开发者轻松实现各种功能,从数据分析到Web开发,从机器学习到图像处理,涵盖了各个领域。在Python的开发过程
    的头像 发表于 04-14 12:11 1155次阅读

    SQLite数据python的区别

    、数据科学等方面。SQLite数据Python之间很多不同之处,下面将详细解析它们之间的区别。 1. 数据类型 SQLite是一种关系型数据
    的头像 发表于 08-28 16:41 854次阅读

    python什么用 如何用python创建数据

    python什么用 如何用python创建数据 Python是一种高级编程语言,可以用于开发各种类型的应用程序和工具。它的广泛应用使它在
    的头像 发表于 08-28 16:41 1172次阅读

    python读取数据数据 python查询数据 python数据连接

    ,获取数据的数据,并对数据进行增删改查等操作。本文将详细介绍Python如何连接数据、读取数据数据以及如何进行查询操作。 一、
    的头像 发表于 08-28 17:09 1808次阅读

    Pythonoloredlogs的使用

    coloredlogs介绍 coloredlogs是一个Python,它允许开发人员在控制台打印彩色日志。这个的主要优点是它可以很容易地改变日志消息的颜色,从而使日志更易于阅读和理解。这对
    的头像 发表于 10-07 11:28 826次阅读
    <b class='flag-5'>Python</b><b class='flag-5'>库</b><b class='flag-5'>中</b>oloredlogs的使用

    Python 在什么情况下才进行重试

    如何写得优雅、易用,是我们要考虑的问题。 这里要给大家介绍的是一个第三方 - Tenacity (标题中的重试机制并并不准确,它不是 Python 的内置模块,因此并不能称之为机制),它实现了几乎我们可以使用到的所有
    的头像 发表于 10-21 11:18 351次阅读

    Tenacity重试模块实践

    如何写得优雅、易用,是我们要考虑的问题。 这里要给大家介绍的是一个第三方 - Tenacity ,它实现了几乎我们可以使用到的所有重试场景,比如: 在什么情况下才进行重试重试几次
    的头像 发表于 11-02 11:33 400次阅读

    Python关于retrying的使用

    到使用try except来进行异常捕捉进行失败重试(Retry)。虽然try-escept一个非常常见和有效的方式来增强程序稳定性,但是可能一不小心就会造成栈溢出。 所以接下来我就来介绍一个另外的一个专门用于失败重试
    的头像 发表于 11-14 11:01 497次阅读

    python如何引入math

    Python,要使用math,首先需要先引入它。mathPython的一个标准,它提
    的头像 发表于 11-22 11:03 4229次阅读

    python第三方哪些

    Python 作为一门功能强大的编程语言,拥有丰富的第三方,几乎覆盖了各个领域的应用。下面是一些常见且广泛应用的 Python 第三方的总结,希望能为您提供帮助。 NumPy(Nu
    的头像 发表于 11-29 14:31 2125次阅读

    小三轴荷重试验机是什么?哪些介绍

    小三轴荷重试验机是什么?哪些介绍
    的头像 发表于 12-07 09:09 449次阅读
    小三轴荷<b class='flag-5'>重试</b>验机是什么?<b class='flag-5'>有</b>哪些介绍