为什么在创建太多的小任务时,Python的 asyncio性能会下降?
我在研究Python的 asyncio,发现当我创建大量非常小的异步任务时,性能会变差。
import asyncio
import time
async def tiny_task():
await asyncio.sleep(0)
async def main():
tasks = [asyncio.create_task(tiny_task()) for _ in range(100000)]
await asyncio.gather(*tasks)
start = time.time()
asyncio.run(main())
print(time.time() - start)
解决方案
并不存在“性能下降”——只是为每个任务创建并执行那一行代码所需的开销时间。
将任务数量从100_000增加到1_000_000时,使用你的代码片段实际显示出比线性增长更优的时间表现 -
因为这些任务实际上并不执行异步等待,只是在事件循环中进行一次让步——因此CPU预计会100% 忙于运行这段代码——并且由于asyncio的特性,它是在单个线程中完成的——因此也只会在一个处理器核心上运行。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。