gpt4 book ai didi

python - 如何处理 requests_futures 的速率限制?

转载 作者:行者123 更新时间:2023-12-04 01:39:13 25 4
gpt4 key购买 nike

我一直在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com