如Can I set max_retries for requests.request?所述,可以通过urllib3和请求模块灵活支持在Python中重试失败的http请求。默认选项允许指数退避方法。
但是我有很多客户端与我的服务器并行运行,我希望客户端通过以不同的速率退回来管理负载,随机。早期的retry_callable
参数用于在制作Retry
对象时提供任意回调函数,如A look at the new retry behavior in urllib3 | Kevin Burke所述,并未进入最终代码。有没有其他方法可以实现我正在寻找的东西,而不是通过他帮助我们避免的try-except
块来实现重试自己的复杂性?
答案 0 :(得分:0)
在查看重试代码后,我认为可能的解决方法可能是使用具有覆盖乘法运算符的类:
class FuncBackoff:
def __init__(self, func):
self.func = func
def __mul__(self, other):
return self.func() * other
def __rmul__(self, other):
return self.__mul__(other)
并以某种方式使用它,就像 Retry(..., backoff_factor=FuncBackoff(lambda: random.uniform(1, 5)), ...)
显然,如果未来退避时间的计算方式发生变化,这可能会被破坏。