【发布时间】:2022-11-29 05:48:58
【问题描述】:
我试图解决的问题:我正在向服务器发出许多 api 请求。我试图在异步 api 调用之间创建延迟以符合服务器的速率限制策略。
我想让它做什么我希望它表现得像这样:
- 发出 api 请求#1
- 等待0.1秒
- 发出 api 请求 #2
- 等待0.1秒 ... 等等 ...
- 重复直到发出所有请求
- 收集响应并将结果返回一个对象(结果)
问题:我什么时候介绍的asyncio.sleep()或者时间.睡眠()在代码中,它仍然几乎是瞬间发出 api 请求。它似乎延迟了执行打印(),但不是 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, url, 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 ", url, " 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, urls, delay)) Versions I'm using: python 3.8.5 aiohttp 3.7.4 asyncio 3.4.3我将不胜感激指导我走向正确方向的任何提示!
【问题讨论】:
标签: python api python-asyncio aiohttp delayed-execution