我在Python3.7.3中运行这段代码
import asyncio
async def fun(time):
print(f"will wait for {time}")
await asyncio.sleep(time)
print(f"done waiting for {time}")
async def async_cenas():
t1 = asyncio.create_task(fun(1))
print("after 1")
t2 = asyncio.create_task(fun(2))
print("after 2")
def main():
t1 = asyncio.run(async_cenas())
print("ok main")
print(t1)
if __name__ == '__main__':
main()
print("finished __name__")
并获得此输出:
after 1
after 2
will wait for 1
will wait for 2
ok main
None
finished __name__
我还希望看到:
done waiting for 1
done waiting for 2
也就是说,为什么期望asyncio.run(X)
在继续之前会等待协同路由完成
如果您想等待} 或^{} (区别在here中描述)。否则,当退出传递给
create_task
生成的所有任务完成,那么您需要显式地执行,例如,只需依次为它们执行await
,或者使用异步IO工具,如^{asyncio.run
的主协程时,asyncio.run
将取消它们例如:
相关问题 更多 >
编程相关推荐