【发布时间】:2021-04-03 22:37:49
【问题描述】:
我有密码。为什么退出 asyncio main 时没有调用任务?调用任务的逻辑是什么?
async def func1():
print('func1')
### task2 = asyncio.create_task(func2())
return 'func1-result'
async def func2():
print('func2')
return 'func2-result'
async def main():
print('main')
task1 = asyncio.create_task(func1())
task2 = asyncio.create_task(func2())
return 'main-result'
res = asyncio.run(main())
我进入标准输出:
main
func1
func2
但如果我这样做:
import asyncio
async def func1():
print('func1')
task2 = asyncio.create_task(func2())
return 'func1-result'
async def func2():
print('func2')
return 'func2-result'
async def main():
print('main')
task1 = asyncio.create_task(func1())
### task2 = asyncio.create_task(func2())
return 'main-result'
res = asyncio.run(main())
main
func1
为什么第一种情况task2进入事件循环并执行,而第二种情况却没有?
【问题讨论】:
-
你的程序在 task2 运行前退出
-
第一种情况下task1运行前退出
-
退出有一些开销,显然调度task1就足够了。
标签: python python-3.x python-asyncio