如何提高python程序代码的健壮性( 二 )

from retrying import retryimport time@retry(wait_exponential_multiplier=1000,wait_exponential_max=10000)def func():print(f"记录失败重试:",time.strftime("%Y-%m-%d %H:%M:%S"))result=1 / 0print(result)return resultfunc()

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

如何提高python程序代码的健壮性

文章插图
(5)wait_func
在前面介绍的参数都是如何配置失败冲重试的等待时间或者重试次数之类的,但是我们不能时时刻刻盯着程序,在程序代码发生错误时我们应该要进行发送短信或者邮件之类的提醒才行
在这里就可以使用到wait_func参数,它接收一个可执行函数,返回一个具体的间隔时间数值,单位ms 。接收的函数须接收两个参数:attempt_number当前运行次数,delay_since_first_attempt_ms当前重试机制运行时间(单位ms)
from retrying import retryimport timedef 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 / 0return resultfunc()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.

如何提高python程序代码的健壮性

文章插图
使用wait_func通过调用其他可执行的函数 , 我们可以借助它来做一些临时的补救措施,避免程序一直无法运行而产生的影响 。
(6) 其他参数
在retry中还存在有很多参数,有兴趣的小伙伴可以去详细了解下
如何提高python程序代码的健壮性

文章插图
  • 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_multiplier和wait_exponential_max:以指数的形式产生两次「retrying」之间的停留时间,产生的值为2^previous_attempt_number * wait_exponential_multiplier , previous_attempt_number是前面已经「retry」的次数,如果产生的这个值超过了wait_exponential_max的大?。?敲粗?罅礁觥竢etrying」之间的停留值都为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用法差不多 。




推荐阅读