gpt4 book ai didi

python - 如何在处理请求重试时覆盖 BACKOFF_MAX

转载 作者:太空宇宙 更新时间:2023-11-04 02:36:55 25 4
gpt4 key购买 nike

我正在使用带有 python3 的请求模块来实现失败时的重试机制。

以下是我的代码-

session = session or requests.Session()
retry = Retry(
total=retries,
read=retries,
connect=retries,
backoff_factor=backoff_factor,
status_forcelist=status_forcelist,
method_whitelist=method_whitelist)
retry.BACKOFF_MAX = 60
adapter = HTTPAdapter(max_retries=retry)
session.mount(BASE_URL, adapter)
return session

我没有看到任何命名参数来设置最大退避(重试类中的 BACKOFF_MAX)。我不希望重试之间的 sleep 时间超过 60 秒。我怎样才能实现它?重置 BACKOFF_MAX 不起作用

最佳答案

这是我实现我想要行为的技巧:

from urllib3.util.retry import Retry

class RetryRequest(Retry):
BACKOFF_MAX = 77

优点:

  • 您不必重写 Retry 的任何方法 (urllib3.util.retry)

缺点:

  • 不是真正的参数

其他答案似乎处理“真实参数”的情况。但是,您还必须覆盖 new() 方法:

from urllib3.util.retry import Retry

class RetryRequest(Retry):
def __init__(self, backoff_max=Retry.BACKOFF_MAX, **kwargs):
super().__init__(**kwargs)
self.BACKOFF_MAX = backoff_max

def new(self, **kwargs):
return super().new(backoff_max=self.BACKOFF_MAX, **kwargs)

如果您不覆盖它,它将使用 __init__() 定义中设置的默认参数。

不要犹豫,用以下方法测试您的解决方案:

total=100
retry = RetryRequest(total=total, backoff_factor=0.1, backoff_max=77)

for i in range(0, total):
print("Try #%d" % (total - retry.total + 1))
retry = retry.increment()
print(retry.get_backoff_time())

关于python - 如何在处理请求重试时覆盖 BACKOFF_MAX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47675138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com