Python 3.7+Асинхронное программированиефункция
asyncio.all_tasks()
интроспекция
Возвращает множество ещё не завершённых задач текущего цикла событий — в том числе задачу, которая вызвала функцию.
Синтаксис
asyncio.all_tasks(loop=None)
В множество входит и сама вызывающая задача (у asyncio.run это main), поэтому «дождаться всех остальных» пишут как all_tasks() - {current_task()}, иначе gather будет ждать сам себя вечно. Завершённые задачи в ответ не попадают. Без работающего цикла функция бросает RuntimeError; до 3.7 был метод Task.all_tasks(), он удалён в 3.9.
Примеры
import asyncio
async def job():
await asyncio.sleep(0.01)
async def main():
tasks = [asyncio.create_task(job()) for _ in range(2)]
print(len(asyncio.all_tasks())) # → 3 — две job и сама main
others = asyncio.all_tasks() - {asyncio.current_task()}
await asyncio.gather(*others)
print(len(asyncio.all_tasks())) # → 1
asyncio.run(main())
import asyncio
try:
asyncio.all_tasks()
except RuntimeError as e:
print(e) # → no running event loop
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности