python 如何优雅的使用retrying进行重试请求
retrying 模块
一、 简介
retrying是一个python的重试包,可以用来自动重试一些可能运行失败的程序段,retrying提供一个装饰器函数retry,被装饰的函数就会在运行失败的情况下重新执行,默认只要一直报错就会不断重试
安装:
pip install retrying
二、 使用方法
1、 无参数
使用 retry,默认的行为会一直重试, 没有时间等待,直到不再报错为止。
from retrying import retry
from random import randint
@retry # 使用 retry,默认的行为会一直重试, 没有时间等待,直到不再报错为止
def get_random():
count = randint(0, 20)
if count > 0:
print(f"该随机数等于{count}")
raise IOError("该随机数大于0")
else:
return count
print(f"该随机数等于{get_random()}")
2、 有参数
2.1 stop_max_attempt_number
stop_max_attempt_number: 用来设定重试的最大次数,超过该次数就会停止
from retrying import retry
from random import randint
@retry(stop_max_attempt_number=3)
def get_random():
count = randint(0, 100)
if count > 0:
print(f"该随机数等于{count}")
raise IOError("该随机数大于0")
else:
return count
print(f"该随机数等于{get_random()}")

2.2 stop_max_delay
stop_max_delay:重试多长时间,单位:毫秒
from retrying import retry
from random import randint
@retry(stop_max_delay=100)
def get_random():
count = randint(0, 20)
if count > 0:
print(f"该随机数等于{count}")
raise IOError("该随机数大于0")
else:
return count
print(f"该随机数等于{get_random()}")
2.3 wait_fixed
wait_fixed:每次重试之间的固定等待时间(毫秒)
from retrying import retry
from random import randint
@retry(wait_fixed=2)
def get_random():
count = randint(0, 100)
if count > 0:
print(f"该随机数等于{count}")
raise IOError("该随机数大于0")
else:
return count
print(f"该随机数等于{get_random()}")
2.4 wait_random_[min/max]
wait_random_[min/max]: 两次retrying之间的停留最短/最长时间
from retrying import retry
from random import randint
@retry(wait_random_min=1, wait_random_max=9)
def get_random():
count = randint(0, 100)
if count > 0:
print(f"该随机数等于{count}")
raise IOError("该随机数大于0")
else:
return count
print(f"该随机数等于{get_random()}")
2.5 wait_exponential_[multiplier/max]
wait_exponential_[multiplier/max]:重试尝试中增加时间间隔
from retrying import retry
from random import randint
@retry(wait_exponential_multiplier=100, wait_exponential_max=10000)
def get_random():
count = randint(0, 100)
if count > 0:
print(f"该随机数等于{count}")
raise IOError("该随机数大于0")
else:
return count
print(f"该随机数等于{get_random()}")
2.6 其他可用参数
class Retrying(object):
def __init__(
self,
stop=None, wait=None, # 停止时间和等待时间
stop_max_attempt_number=None, # 最大尝试次数
stop_max_delay=None, # 最大运行时间
wait_fixed=None, # 延迟时间
wait_random_min=None, wait_random_max=None, # 随机等待时间
wait_incrementing_start=None, wait_incrementing_increment=None, # 运行下次,增加延时
wait_incrementing_max=None,
wait_exponential_multiplier=None,wait_exponential_max=None, # 等待时间按指数形式增长
retry_on_exception=None,
retry_on_result=None,
wrap_exception=False,
stop_func=None, # 每次完成后运行的新函数
wait_func=None,
wait_jitter_max=None,
before_attempts=None,
after_attempts=None,

浙公网安备 33010602011771号