第一个例子:
import asyncio
async def req():
print('request')
await asyncio.sleep(1)
async def run():
print(len(asyncio.Task.all_tasks()))
asyncio.ensure_future(req())
print(len(asyncio.Task.all_tasks()))
await asyncio.sleep(2)
print(len(asyncio.Task.all_tasks()))
loop = asyncio.get_event_loop()
loop.run_until_complete(run())
结果是:
1
2
request
1
第二个例子:
import asyncio
async def req():
print('request')
await asyncio.sleep(1)
async def run():
print(len(asyncio.Task.all_tasks()))
t = asyncio.ensure_future(req())
print(len(asyncio.Task.all_tasks()))
await t
print(len(asyncio.Task.all_tasks()))
loop = asyncio.get_event_loop()
loop.run_until_complete(run())
结果是:
1
2
request
2
那么,为什么在第一个例子中最后一次调用 asyncio.Task.all_tasks()返回1而在第二个例子中它返回2? 换句话说,为什么在第一个例子中,包装req()从一组事件循环的所有任务中删除,以及为什么第二个例子不正确。
答案 0 :(得分:2)
当destroyed all_tasks()
时,该任务已从del
移除。
添加 [...]
await t
del t
print(len(asyncio.Task.all_tasks()))
声明:
1
2
request
1
它会产生:
{{1}}