Backend Matrix: post #2139 — TG.ME

⚡️ Трюк: asyncio.gather vs asyncio.TaskGroup (Python 3.11+)

Если ты до сих пор используешь asyncio.gather для параллельного запуска асинхронных тасок, пора обновляться. В Python 3.11 появились TaskGroup
import asyncio

async def fetch_user(user_id: int): ...
async def fetch_orders(user_id: int): ...

# Старый подход (при ошибке в одной таске остальные продолжают работать):
# users, orders = await asyncio.gather(fetch_user(1), fetch_orders(1))

# Современный подход через TaskGroup:
async def main():
async with asyncio.TaskGroup() as tg:
task1 = tg.create_task(fetch_user(1))
task2 = tg.create_task(fetch_orders(1))

# Сюда код попадет только когда ОБЕ таски завершатся
user = task1.result()
orders = task2.result()

Если одна таска падает с ошибкой, TaskGroup автоматически отменяет все остальные таски в группе и выбрасывает ExceptionGroup
July 26, 2026 255 1