• retrying模块的使用


    retrying模块的使用

     

    安装模块:pip3 install retrying

    使用方式:

    1. 使用retrying模块提供的retry模块
    2. 通过装饰器的方式使用,让装饰器的函数反复的执行
    3. retry可以传入参数stop_max_attempt_number,让函数报错后继续重新执行,达到最大执行次数的上线,如果每次都报错,整个函数就报错,只要中间有一个成功了的话,程序就可以继续往后面执行了

    例子:

    复制代码
    from retrying import retry
    @retry(stop_max_attempt_number=5,wait_random_min=1000,wait_random_max=5000)
    def run():
      print("开始重试")
      raise NameError
     
    if __name__ == '__main__':
      run()
    复制代码

    首先导入了retry模块

    然后装饰了一个run函数,函数中很简单,主要就是通过raise跑出了一个异常,执行这个代码 我们可以发现,程序打印了五次开始重试,最后一次抛出异常,NameError,那么到了这里我们就可以感受到,就是这么简单的代码,就完成了五次重试,同时这五次重试的间隔时间也是不同的,要是想尝试重复十次以上的的话,就需要把上面的stop_max_attempt_number改成10就可以了,到这里就可以解释retry装饰器的参数了

    retry的使用就是这么简单,关键是装饰器里面的参数的使用,要是不写参数的话就会一直一种重试

    stop_max_attempt_number

        在停止之前尝试的最大次数,最后一次如果还是有异常就会抛出异常,停止运行,默认是五次(强调总次数)

    stop_max_delay

        最大延迟时间,大概的意思就是:如果调用的函数抛出异常了,那么就会重复调用这个函数,最大调用时间,默认100毫秒

      

    wait_random_min

        在两次调用方法停留时长,停留最短的时间,默认是0

    wait_random_max

        在两次调用方法停留时长,停留最长时间,默认是1000毫秒

    wait_incrementing_increment

        每调用一次就会增加的时长,默认是100毫秒

    wait_exponential_multiplier和wait_exponential_max

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

    retry_on_exception

        指定一个函数,如果这个函数返回指定异常,就会重试,如果不是指定的异常就会推出

    复制代码
    from retrying import retry
    def run2(exception):
      return isinstance(exception, ZeroDivisionError)
    @retry(retry_on_exception=run2)
    def run():
      print("开始重试")
      a = 1 / 0
    if __name__ == '__main__':
      run()
    复制代码

    retry_on_result

        指定一个函数,如果指定的函数返回True,就重试,否则抛出异常退出

    复制代码
    rom retrying import retry
    def run2(r):
      return isinstance(r, int)
    @retry(retry_on_result=run2)
    def run():
      print("开始重试")
      a = 1
      return a
    if __name__ == '__main__':
      run()
    复制代码

    wrap_exception

        参数设置为True/False,如果指定的异常类型,包裹在retryError中,就会看到RetryError和程序抛出的Exception error

    stop_func

        每次抛出异常的时候都会执行的函数,如果stop_max_delay、stop_max_attmpt_number配合使用,则后两个就会失效,指定的stop_func会有两个参数:attempt、delay

    wait_func

        和stop_func的用法差不多,就不过多的描述了 

    ps:如果没有捕获到异常,就会从该层外层的异常重试触发;尝试两次失败会报错,所以在再次使用处理,跳出报错,直接pass

  • 相关阅读:
    485串口接线
    mvc3 升级mvc5
    VB连接ACCESS数据库,使用 LIKE 通配符问题
    VB6 读写西门子PLC
    可用的 .net core 支持 RSA 私钥加密工具类
    解决 Win7 远程桌面 已停止工作的问题
    解决 WinForm 重写 CreateParams 隐藏窗口以后的显示问题
    解决安装 .net framework 发生 extracting files error 问题
    CentOS7 安装配置笔记
    通过特殊处理 Resize 事件解决 WinForm 加载时闪烁问题的一个方法
  • 原文地址:https://www.cnblogs.com/klausage/p/11751879.html
Copyright © 2020-2023  润新知