Python asyncio.create_task内存泄漏问题:这段代码是否存在问题?
问题解答
你代码里的这种情况不会导致内存泄漏,原因如下:
- 当
asyncio.run(main())执行时,main函数返回后,事件循环并不会立刻退出——它会继续运行所有已通过asyncio.create_task创建的后台任务,直到这些任务全部完成。也就是说,你创建的task_2虽然没被await,但它还是会执行完func(2)的逻辑,之后相关的任务对象和资源会被自动回收。 - 只有在长期运行的事件循环场景(比如持续运行的异步服务器)中,反复创建任务却从不
await也不主动取消,且这些任务本身持有大量资源或长期处于运行状态时,才会逐渐累积内存导致泄漏。你的代码里事件循环会在所有任务完成后正常退出,不存在这个问题。
如果你想避免task_2执行不必要的逻辑(比如节省系统资源),可以在return前主动取消它:
async def main(): task_1 = asyncio.create_task(func(1)) task_2 = asyncio.create_task(func(2)) res_1 = await task_1 if res_1 == 1: task_2.cancel() # 取消未使用的任务 return res_2 = await task_2
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

