python-requests - 在 Python 中使用随机退避延迟重试失败的 http 请求?

标签 python-requests urllib3

可通过 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/

相关文章:

angularjs - Python flask 和AngularJS与链接http post请求顺序

python - Python 3 中的 urllib 使用

python-3.x - 忽略 SSL 证书验证有什么影响?

python - 如何使用 python 3.x 从远程 url 打印 csv 内容?

google-app-engine - 在 Google App Engine 中使用请求 python 库

python - 如何在 Python 中使用 urllib3 查看 HTTP header 、响应代码和 html 内容?

python - 使用 python 3.3 请求

python - 将 .py 编译为 .exe 后验证 ssl 证书失败

python - Scrapy POST 请求不工作 - 400 错误请求

Python 套接字和请求