重试/retrying/retry/重试控制机制
retrying 是一个 Python 包,用于提供一个装饰器(以及一个重试控制机制),允许你将其应用于任何函数或方法上,使得在遇到特定的异常或者返回条件不满足时自动重试。使用 retrying 包中的 retry 函数可以帮助简化代码中处理瞬时错误或不稳定操作(如网络请求)的逻辑。
当你使用 @retry 装饰器装饰一个函数时,可以指定多个参数来控制重试行为,包括:
stop_max_attempt_number: 重试的最大次数。stop_max_delay: 最大的重试延迟时间(毫秒),超过这个时间后不再重试。wait_fixed: 两次重试之间的固定等待时间(毫秒)。wait_random_min和wait_random_max: 两次重试之间的随机等待时间的最小值和最大值(毫秒)。retry_on_exception: 一个函数,当它返回True时,会在抛出的异常上重试。retry_on_result: 一个函数,当目标函数返回值使得该函数返回True时进行重试。
例如,假设你有一个网络请求的函数,由于网络波动,你希望在遇到连接错误时自动重试,但最多重试3次,每次重试之间等待2秒:
from retrying import retry
import requests
@retry(stop_max_attempt_number=3, wait_fixed=2000)
def fetch_data(url):
response = requests.get(url)
response.raise_for_status() # 如果响应码不是 200,会抛出异常
return response.json()
# 使用这个函数,它会在失败时尝试最多3次,每次尝试之间等待2秒
data = fetch_data("https://example.com/api/data")
在这个例子中,如果 requests.get(url) 因为网络问题抛出异常(比如 requests.exceptions.ConnectionError),fetch_data 函数会自动重试,直到尝试了3次或者成功获取数据为止。