重试/retrying/retry/重试控制机制

retrying 是一个 Python 包,用于提供一个装饰器(以及一个重试控制机制),允许你将其应用于任何函数或方法上,使得在遇到特定的异常或者返回条件不满足时自动重试。使用 retrying 包中的 retry 函数可以帮助简化代码中处理瞬时错误或不稳定操作(如网络请求)的逻辑。

当你使用 @retry 装饰器装饰一个函数时,可以指定多个参数来控制重试行为,包括:

  • stop_max_attempt_number: 重试的最大次数。
  • stop_max_delay: 最大的重试延迟时间(毫秒),超过这个时间后不再重试。
  • wait_fixed: 两次重试之间的固定等待时间(毫秒)。
  • wait_random_minwait_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次或者成功获取数据为止。

posted @ 2024-03-22 22:53  __username  阅读(54)  评论(0编辑  收藏  举报

本文作者:DIVMonster

本文链接:https://www.cnblogs.com/guangzan/p/12886111.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。