在Python请求get或post方法上干净地设置max_retries

par*_*axi 16 python python-requests

与旧版本的请求相关问题:我可以为requests.request设置max_retries吗?

我还没有看到一个例子,干净地结合max_retries在一个requests.get()requests.post()通话.

会爱一个

requests.get(url, max_retries=num_max_retries))
Run Code Online (Sandbox Code Playgroud)

履行

Ian*_*sco 33

快速搜索python-requests文档清楚地显示max_retries使用时如何设置Session.

要直接从文档中提取代码:

import requests
s = requests.Session()
a = requests.adapters.HTTPAdapter(max_retries=3)
b = requests.adapters.HTTPAdapter(max_retries=3)
s.mount('http://', a)
s.mount('https://', b)
s.get(url)
Run Code Online (Sandbox Code Playgroud)

但是,您要查找的内容由于以下几个原因而无法配置:

  1. 请求不再提供配置方法

  2. 重试次数特定于正在使用的适配器,而不是会话或特定请求.

  3. 如果一个请求需要一个特定的最大请求数,那对于不同的请求就足够了.

这一变化是在一年多前的1.0请求中引入的.我们故意将它保留为2.0,因为它最有意义.如果您正在考虑询问,我们也不会引入参数来配置最大重试次数或其他任何内容.


编辑使用类似的方法,您可以更好地控制重试的工作方式.您可以阅读此内容以获得良好的感觉.简而言之,您需要从中导入Retryurllib3(见下文)并告诉它如何表现.我们将其传递给urllib3您,您将有更好的选项来处理重试.

from requests.packages.urllib3 import Retry
import requests

# Create a session
s = requests.Session()

# Define your retries for http and https urls
http_retries = Retry(...)
https_retries = Retry(...)

# Create adapters with the retry logic for each
http = requests.adapters.HTTPAdapter(max_retries=http_retries)
https = requests.adapters.HTTPAdapter(max_retries=https_retries)

# Replace the session's original adapters
s.mount('http://', http)
s.mount('https://', https)

# Start using the session
s.get(url)
Run Code Online (Sandbox Code Playgroud)

  • 这是我发现的关于重试的最佳建议:https://www.peterbe.com/plog/best-practice-with-retries-with-requests (2认同)