Python Glossary English

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Сообщить о неточности