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)
我是 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)