请尝试以下代码:
import asyncio
async def fun1():
#block
await asyncio.sleep(10)
loop = asyncio.get_event_loop()
count = 0
while count < 10:
count += 1
print(count)
try:
fut = asyncio.ensure_future(asyncio.wait_for(fun1(),1))
loop.run_until_complete(fut)
except:
pass
然后按asyncio.Task.all_tasks(loop=loop)
检查任务。您将看到所有已取消/已完成的任务仍然绑定到循环。而不是关闭并获得一个新的循环,我如何保持循环并只清除已完成/取消的任务?
答案 0 :(得分:2)
任务绑定到weakref循环,这意味着如果不存在对它们的引用,它们将在下一个gc运行时被垃圾收集:
import asyncio
import gc
def main():
# your code here
main()
print('Before gc:', asyncio.Task.all_tasks())
gc.collect()
print('After gc:', asyncio.Task.all_tasks())
在gc run之后你会看到空集。