Я использую Python-запросы для получения данных от API, но я хочу ускорить их, выполняя асинхронный запуск с request_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']
Когда я достигну скоростипредел, мне нужен способ повторить только запросы, которые не удалось. Есть ли в request_futures какой-то встроенный способ справиться с этим?
Обновление : в библиотекеques_futures нет ничего встроенного для этого. Я обнаружил эту связанную открытую проблему: https://github.com/ross/requests-futures/issues/26. Я попытаюсь ускорить выполнение запросов, так как знаю предел API, но это не поможет, если другой пользователь из моей организации одновременно использует тот же API.