【发布时间】:2021-03-20 19:33:19
【问题描述】:
我在 Python 3.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) 会等待协程完成后再继续。
【问题讨论】:
-
您的问题是什么?
run等待主协程,然后取消所有其他任务,您可以阅读 implementation -
感谢源链接,这有助于@NobbyNobbs
-
@larsks
run_until_complete将遇到完全相同的“问题”,即只等待您告诉它等待的内容。事实上,asyncio.run是loop.run_until_complete的一个相当简单的包装器。
标签: python python-asyncio