Python asyncio.TaskGroup: отменить связанные задачи вместе

Категория: Python · Язык: Python · Обновлено:

asyncio.TaskGroup группирует связанные корутины: если одна задача падает, группа отменяет остальные и дожидается их завершения при выходе из async with. Это упрощает безопасную обработку нескольких запросов.

Рабочий пример

Python
import asyncio
async def fetch131(name):
    await asyncio.sleep(0)
    return name.upper()
async def main131():
    async with asyncio.TaskGroup() as group131:
        first131 = group131.create_task(fetch131("users"))
        second131 = group131.create_task(fetch131("orders"))
    return [first131.result(), second131.result()]
print(asyncio.run(main131()))  # ['USERS', 'ORDERS']

TaskGroup появился в Python 3.11. Все дочерние задачи завершены до выхода из блока; исключения могут быть собраны в ExceptionGroup и обработаны через except*.

Частый вопрос

Когда использовать gather вместо TaskGroup?

gather удобен, когда нужен упорядоченный список результатов и независимая политика ошибок. TaskGroup подходит для связанных задач с гарантированным совместным завершением.