可通过 urllib3 和请求模块灵活支持在 Python 中重试失败的 http 请求,如 Can I set max_retries for requests.request? 所述。默认选项允许指数退避方法。
但我会有很多客户端与我的服务器并行运行,我希望客户端通过以不同的速率退出来帮助管理负载,随机。一个较早的 retry_callable
参数,用于在生成 Retry
对象时提供任意回调函数,如 A look at the new retry behavior in urllib3 | Kevin Burke 中所述。没有进入最终代码。有没有其他方法可以完成我正在寻找的东西,而无需通过他帮助我们避免的那种 try-except
block 来实现自己重试的复杂性?
最佳答案
这已经存在了一段时间,但无论如何:最直接的解决方案是继承Retry
,重载.get_backoff_time()
,例如
class RandomisedRetry(Retry):
def get_backoff_time(self):
from random import random
return random() * super().get_backoff_time()
由于 .get_backoff_time()
是 Retry
的公共(public) API 的一部分,我认为它应该保留一段时间。
实际上,作为旁注,传递 lambda 通常是一个穷人的继承,因此在考虑 lambda 时,请考虑子类化。
关于python-requests - 在 Python 中使用随机退避延迟重试失败的 http 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46760228/