Asyncio - 如何限制每 1 秒的请求?

Asyncio - how to limit requests per 1 second?

我是 asyncio 的新手,试图对 API 进行异步调用,但是当我发送超过 1 个 request/second 时,API 响应 429 状态码 -请求太多...根据 API 文档,我应该只做 1 req/sec.

不知道如何做到每秒只有 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={}' '&key=+key &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)

非常感谢您的帮助!

已解决,只是将 'await asyncio.sleep(delay_per request)' 添加到任务创建循环中。

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={}' '&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)