- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在使用 Python 请求从 API 获取数据,但我想通过与 requests_futures 异步运行来加快速度。我每分钟只允许 200 个 API 请求,所以我必须检查这个并等待指定的秒数再重试。此数字在 Retry-After
header 中返回。这是原始的工作代码:
session = requests.Session()
for id in ticketIds:
url = 'https://colorfront.zendesk.com/api/v2/tickets/' + str(id) + '/comments.json'
req = requests.get(url, auth=zd_secret)
if req.status_code == 429:
time.sleep(int(req.headers['Retry-After']))
req = requests.get(url, auth=zd_secret)
comments += req.json()['comments']
以下异步代码会一直运行,直到达到速率限制,然后所有请求都会失败。
session = FuturesSession()
futures = {}
for id in ticketIds:
url = 'https://colorfront.zendesk.com/api/v2/tickets/' + str(id) + '/comments.json'
futures[id] = session.get(url, auth=zd_secret)
for id in ticketIds:
comments += futures[id].result().json()['comments']
当我达到速率限制时,我需要一种方法来仅重试失败的请求。 requests_futures 是否有一些内置的方法来处理这个问题?
更新:requests_futures 库没有为此内置任何内容。我发现了这个相关的开放问题:https://github.com/ross/requests-futures/issues/26 .因为我知道 API 限制,所以我会尝试预先调整请求的速度,但如果我组织的另一个用户同时访问相同的 API,那将无济于事。
最佳答案
您应该能够使用 urllib3.util.retry
中的 Retry 模块实现这一目标:
from requests_futures.sessions import FuturesSession
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
session = FuturesSession()
retries = 5
status_forcelist = [429]
retry = Retry(
total=retries,
read=retries,
connect=retries,
respect_retry_after_header=True,
status_forcelist=status_forcelist,
)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)
futures = {}
for id in ticketIds:
url = 'https://colorfront.zendesk.com/api/v2/tickets/' + str(id) + '/comments.json'
futures[id] = session.get(url, auth=zd_secret)
for id in ticketIds:
comments += futures[id].result().json()['comments']
关于python - 如何处理 requests_futures 的速率限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58255753/
我一直在使用 Python 请求从 API 获取数据,但我想通过与 requests_futures 异步运行来加快速度。我每分钟只允许 200 个 API 请求,所以我必须检查这个并等待指定的秒数再
我正在尝试将 requests_futures ( https://github.com/ross/requests-futures ) 用于似乎工作正常的异步请求。唯一的问题是,它不会为我抛出任何异
我是一名优秀的程序员,十分优秀!