为什么下面使用 asyncio.create_task() 创建的任务没有被垃圾回收?
import asyncio
import gc
c = 0
async def run():
global c
try:
while True:
await asyncio.sleep(1)
c += 1
except Exception as e:
print(e)
async def main():
task = asyncio.create_task(run())
del task
while True:
await asyncio.sleep(0.2)
print(c)
gc.collect()
asyncio.run(main())
预期:
0
0
0
asyncio.CancelledError
实际:
0
0
0
0
0
1
1
1
1
1
..
101
101
101
101
101
102
...
task = asyncio.create_task(run())
del task
task
并不是该任务的唯一参考。 asyncio.create_task
仍然有一个或多个对该任务的引用,因此它不会被垃圾收集。