Веб-версияОткрыть в Telegram

ПостStructured Concurrency в Python 3.11+ (TaskGroup vs Gather)

2 сентября 2026
Б
Библиотека Python разработчика | Книги по питону
Structured Concurrency в Python 3.11+ (TaskGroup vs Gather) Если вы до сих пор используете asyncio.gather() для запуска конкурентных задач, вы, вероятно, теряете контроль над ошибками. Главная проблема gather: если одна таска падает, остальные продолжают работать (если не стоит return_exceptions=False, который убивает всё сразу, но "грязно"). Плюс, отлавливать несколько ошибок одновременно через try / except - это боль. В Python 3.11+ (и через trio / anyio раньше) стандартом стала Structured Concurrency через asyncio.TaskGroup. Как это выглядит: import asyncio async def task_fail(name, sec): await asyncio.sleep(sec) raise ValueError(f"Error in {name}") async def task_ok(name, sec): await asyncio.sleep(sec) print(f"Task {name} done") async def main(): try: async with asyncio.TaskGroup() as tg: tg.create_task(task_ok("A", 1)) tg.create_task(task_fail("B", 2)) # Упадет через 2 сек tg.create_task(task_fail("C", 1.5)) # Упадет через 1.5 сек except* ValueError as eg: # Обратите внимание на except* (ExceptionGroup) print(f"Caught errors: {eg.exceptions}") # Запуск # asyncio.run(main()) Почему TaskGroup это выбор Middle+: 1. Атомарность скоупа: Если одна задача внутри контекстного менеджера падает, TaskGroup автоматически отменяет (cancel) все остальные запущенные задачи в группе. Вы не оставляете "зомби-процессы" в фоне. 2. Exception Groups: Если упало несколько задач одновременно (или во время отмены), Python соберет их в ExceptionGroup. Конструкция except* позволяет элегантно обрабатывать дерево исключений. Вывод: Для скриптов gather сойдет. Для надежных сервисов, где важна консистентность состояния и корректный шатдаун корутин - переезжайте на TaskGroup. #asyncio #python311 #bestpractices #concurrency 📲 Мы в MAX 👉@BookPython
9 · 1.1K ·

Рядом в ленте

ББиблиотека Python разработчика | Книги по питонуОптимизация кода с помощью генераторов в Python Сегодня хочу показать вам, как использование генераторов может сделать ваш код быстрее, экономнее по памяти и элББиблиотека Python разработчика | Книги по питонуОптимизация SQL-запросов в Django ORM Сегодня я покажу вам, как оптимизировать SQL-запросы в Django ORM, чтобы ваш код работал быстрее и эффективнее. Если ваш D
это сообщение
ББиблиотека Python разработчика | Книги по питонуСписковые включения (list comprehensions) могут содержать несколько операторов for и if: In : [(x, y) for x in range(3) for y in range(3)] Out: [ (0, 0), (0, 1)ББиблиотека Python разработчика | Книги по питону🐍 Как улучшить читаемость кода в Python? Читаемый код - это не роскошь, а необходимость. Если ваш код трудно понять, даже если он работает, это плохой код. Сего
ББиблиотека Python разработчика | Книги по питонуБиблиотека Python разработчика | Книги по питону@BookPython · канал · Технологии
18 046подписчиков901средний охват поста
Лента площадки Открыть в Telegram

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Чего мы не делаем · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем