#python #api #asynchronous #python-asyncio #aiohttp
Вопрос:
Я новичок в asyncio, пытаюсь выполнять асинхронные вызовы API, но когда я отправляю более 1 запроса в секунду, API отвечает кодом состояния 429 — слишком много запросов… Согласно документации API, я должен делать только 1 req/сек.
Не могу понять, как сделать только 1 запрос в секунду для этого кода:
#Call to API
async def ps_request_marshal(converted_urls, device_input):
global device_settings, data, tasks
data = []
device_settings = device_input
tasks = []
url = 'https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url={}' 'amp;key= key amp;strategy=' device_input
async with aiohttp.ClientSession() as session:
for page in converted_urls:
tasks.append(asyncio.create_task(session.get(url.format(page), ssl=False)))
responses = await asyncio.gather(*tasks)
for response in responses:
data.append(await response.json())
print(responses)
Буду очень признателен за вашу помощь!
Ответ №1:
Решено, просто добавил «ожидание asyncio.sleep(запрос delay_per)» в цикл создания задачи.
async def ps_request_marshal(converted_urls, device_input):
global device_settings, data, tasks
data = []
device_settings = device_input
tasks = []
url = 'https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url={}' 'amp;key=key=' device_input
delay_per_request = 1
async with aiohttp.ClientSession() as session:
for page in converted_urls:
tasks.append(asyncio.create_task(session.get(url.format(page), ssl=False)))
await asyncio.sleep(delay_per_request)
responses = await asyncio.gather(*tasks)
print(responses)
for response in responses:
data.append(await response.json())
print(responses)