问题描述
我正在尝试解决的问题: 我正在向服务器发出许多 api 请求。我正在尝试在异步 api 调用之间创建延迟以符合服务器的速率限制政策。
我想让它做什么 我希望它的行为是这样的:
- 发出 API 请求 #1
- 等待 0.1 秒
- 发出 api 请求 #2
- 等待 0.1 秒 ……等等……
- 重复,直到提出所有请求
- 收集响应并将结果返回到一个对象(结果)中
问题: 当我在代码中引入 asyncio.sleep() 或 time.sleep() 时,它仍然几乎是瞬间发出 api 请求。它似乎延迟了 print() 的执行,但不是 api 请求。我怀疑我必须在 循环 中创建延迟,而不是在 fetch_one() 或 fetch_all() 中,但无法弄清楚如何这样做。
代码块:
async def fetch_all(loop,urls,delay):
results = await asyncio.gather(*[fetch_one(loop,url,delay) for url in urls],return_exceptions=True)
return results
async def fetch_one(loop,delay):
#time.sleep(delay)
#asyncio.sleep(delay)
async with aiohttp.ClientSession(loop=loop) as session:
async with session.get(url,ssl=SSLContext()) as resp:
# print("An api call to "," is made at ",time.time())
# print(resp)
return await resp
delay = 0.1
urls = ['some string list of urls']
loop = asyncio.get_event_loop()
loop.run_until_complete(fetch_all(loop,delay))
Versions I'm using:
python 3.8.5
aiohttp 3.7.4
asyncio 3.4.3
如果有任何指导我走向正确方向的提示,我将不胜感激!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)