Python 请求 - 如何为创建的 session 设置默认重试对象?

标签 python python-requests

我想强制所有请求在某些 5xx HTTP 状态代码上重试。我要做的是:

retry = requests.packages.urllib3.util.retry.Retry(
        total=20,
        backoff_factor=0.1,
        status_forcelist=[500, 502, 503, 504],
        method_whitelist=frozenset(['GET', 'POST']))
for adapter in session.adapters.values():
    adapter.max_retries = retry

但是我需要对不同模块/包中具有许多不同 session 的现有代码执行此操作。其中一些使用 s = Session(); s.get() ,其他人使用requests.get() 。所以,我想强制他们都使用这个Retry实例。

可以在 requests 上进行吗?包级别(通过初始化、设置、简单的猴子修补 requests 包)?

import requests

# Initialize/setup/patch requests package.
???

# Following should retry on server errors:
requests.Session().get('http://httpstat.us/500')
requests.post('http://httpstat.us/500', data={})

我尝试设置requests.adapters.DEFAULT_RETRIESretry目的。但这不是它的工作原理......

最佳答案

我会使用exponential backoff算法。

这是一个很好的包,为您提供了一个装饰器:backoff 。可与请求一起使用。

包文档中的代码示例:

@backoff.on_exception(backoff.expo,
                      requests.exceptions.RequestException,
                      max_tries=8)
def get_url(url):
    return requests.get(url)

关于Python 请求 - 如何为创建的 session 设置默认重试对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38987263/

相关文章:

python - 对于简单的 ERP 系统,我可以选择哪种 Python Web 框架?

Python 请求,如何限制接收大小、传输速率和/或总时间?

python-3.x - 如何修复 'requests.exceptions.SSLError'

python - 如何使用python获取网页窗口数据?

python - 使用 python 请求获取 ('Connection aborted.' 、 OSError(0, 'Error' ) 错误

python - 如何使用Python修改SPSS输出文件?

python - 当您不知道您的对象是否可迭代时如何迭代

python - TK 中不存在 ComboBox

python - 如何使用 POST 方法发送 pandas 数据帧并在 Hug/其他 REST API 框架中接收它? pickle.loads 发送后无法取消pickle

python - 无法使用 Selenium 在搜索字段中输入文本