如何等待聚集的任务组?
How to await gathered group of tasks?
我有那个代码
import asyncio
async def f():
await asyncio.sleep(0.1)
print('done')
async def main():
asyncio.create_task(f())
asyncio.create_task(f())
pending = asyncio.all_tasks()
group = asyncio.gather(*pending, return_exceptions=True)
await group
asyncio.run(main())
我不知道为什么它永远有效。当组中的所有任务都完成工作时,我想结束程序。
Python 3.9
编辑:好的...我有。 all_tasks
不仅给我创建的任务。 all_tasks
是否有任何等效项但没有“主要任务”?
main
也是协程,在main
里面等待main
永远不会结束
{
<Task pending name='Task-2' coro=<f() running at /tmp/t.py:3>>,
<Task pending name='Task-1' coro=<main() running at /tmp/t.py:11> cb=[_run_until_complete_cb() at /home/falsetru/.pyenv/versions/3.9.4/lib/python3.9/asyncio/base_events.py:184]>,
<Task pending name='Task-3' coro=<f() running at /tmp/t.py:3>>
}
相反,显式指定调用 f()
的任务不会阻塞
async def main():
pending = []
pending.append(f()) # OR pending.append(asyncio.create_task(f()))
pending.append(f())
group = asyncio.gather(*pending, return_exceptions=True)
await group
我有那个代码
import asyncio
async def f():
await asyncio.sleep(0.1)
print('done')
async def main():
asyncio.create_task(f())
asyncio.create_task(f())
pending = asyncio.all_tasks()
group = asyncio.gather(*pending, return_exceptions=True)
await group
asyncio.run(main())
我不知道为什么它永远有效。当组中的所有任务都完成工作时,我想结束程序。
Python 3.9
编辑:好的...我有。 all_tasks
不仅给我创建的任务。 all_tasks
是否有任何等效项但没有“主要任务”?
main
也是协程,在main
里面等待main
永远不会结束
{
<Task pending name='Task-2' coro=<f() running at /tmp/t.py:3>>,
<Task pending name='Task-1' coro=<main() running at /tmp/t.py:11> cb=[_run_until_complete_cb() at /home/falsetru/.pyenv/versions/3.9.4/lib/python3.9/asyncio/base_events.py:184]>,
<Task pending name='Task-3' coro=<f() running at /tmp/t.py:3>>
}
相反,显式指定调用 f()
的任务不会阻塞
async def main():
pending = []
pending.append(f()) # OR pending.append(asyncio.create_task(f()))
pending.append(f())
group = asyncio.gather(*pending, return_exceptions=True)
await group