Python asyncio.TaskGroup: отменить связанные задачи вместе
asyncio.TaskGroup группирует связанные корутины: если одна задача падает, группа отменяет остальные и дожидается их завершения при выходе из async with. Это упрощает безопасную обработку нескольких запросов.
Рабочий пример
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 подходит для связанных задач с гарантированным совместным завершением.