retrying是一个python的重试包,可以用来自动重试一些可能运行失败的程序段,retrying提供一个装饰器函数retry,被装饰的函数就会在运行失败的情况下重新执行,默认只要一直报错就会不断重试。
安装: pip install retrying
1. 简单实用
import random
from retrying import retry
@retry
def do_something_unreliable():
if random.randint(0, 10) > 1:
print("just have a test")
raise IOError("Broken sauce, everything is hosed!!!111one")
else:
return "Awesome sauce!"
print(do_something_unreliable())
运行该段代码, 你会发现每次随机打印 “just have a test” 这句话的次数不一致.
2. 参数
使用 retry, 默认的行为会一直重试, 没有时间等待.
from retrying import retry
@retry
def do_something():
print('Retry')
raise IOError("Retry")
do_something()
stop_max_attempt_number: 用来设定最大的尝试次数,超过该次数就会停止
from retrying import retry
@retry(stop_max_attempt_number=7)
def do_something():
print('Retry')
raise IOError("Retry")
do_something()
stop_max_delay: 从被装饰的函数开始执行的时间点开始到函数成功运行结束或失败报错中止的时间点。单位:毫秒
from retrying import retry
@retry(stop_max_delay=100)
def do_something():
print('Retry')
raise IOError("Retry")
do_something()
wait_fixed: 设置在两次retrying之间的停留时间
from retrying import retry
@retry(wait_fixed=1000)
def do_something():
print('Retry')
raise IOError("Retry")
do_something()
wait_random_min:两次retrying之间的停留最短时间
wait_random_max:两次retrying之间的停留最长时间
from retrying import retry
@retry(wait_random_min=100, wait_random_max=2000)
def do_something():
print('Retry')
raise IOError("Retry")
do_something()
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.
from retrying import retry
@retry(wait_exponential_multiplier=100, wait_exponential_max=10000)
def do_something():
print('Retry')
raise IOError("Retry")
do_something()