【发布时间】:2020-02-03 22:25:48
【问题描述】:
我一直在使用 Python 请求从 API 获取数据,但我想通过使用 requests_futures 异步运行来加速它。我每分钟只允许 200 个 API 请求,所以我必须检查这一点并等待指定的秒数,然后再重试。此数字在 Retry-After 标头中返回。这是原始工作代码:
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,这将无济于事。
【问题讨论】:
标签: python rest python-requests