Python Разработка | Web Backend, Парсинг & Telegram Bots. Пайтон программирование с нуля. Django, FastAPI и SQL. Уроки для начинающих и IT карьера. Coding.
Python Разработка | Web Backend, Парсинг & Telegram Bots. Пайтон программирование с нуля. Django, FastAPI и SQL. Уроки для начинающих и IT карьера. Coding.
3 046 подписчиков · @BookPython
К каналу →
Оптимизация кода с помощью генераторов в Python Сегодня хочу показать вам, как использование генераторов может сделать ваш код быстрее, экономнее по памяти и элегантнее. Что …
Читать далее →
6 243
Реклама
Оптимизация SQL-запросов в Django ORM Сегодня я покажу вам, как оптимизировать SQL-запросы в Django ORM, чтобы ваш код работал быстрее и эффективнее. Если ваш Django-проект начал …
Читать далее →
6 313

Structured Concurrency в Python 3.11+: TaskGroup vs Gather

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

👉 @BookPython
Списковые включения (list comprehensions) могут содержать несколько операторов for и if: In : [(x, y) for x in range(3) for y in range(3)] Out: [ (0, 0), (0, 1), (0, 2), (…
Читать далее →
6 504
Pydantic V2: Забываем root_validator, используем model_validator правильно Переход на Pydantic V2, это не только ускорение за счет ядра на Rust, но и переосмысление валидации. Сам…
Читать далее →
6 472
Другие главы канала «Python Разработка | Web Backend, Парсинг & Telegram Bots. Пайтон программирование с нуля. Django, FastAPI и SQL. Уроки для начинающих и IT карьера. Coding.»
Выберите главу, чтобы продолжить чтение
Все посты →
Глава от 30.06.2026
Сравнение производительности dict() и {} в Python Какое-то время назад, во врем…
👁 460 просмотров
Глава от 28.06.2026
🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 ht…
👁 432 просмотров
Глава от 26.06.2026
Когда вы пишете собственный метод __repr__ для какого-то объекта, обычно нужно в…
👁 634 просмотров
Глава от 25.06.2026
Модуль functools для манипуляций с функциями Модуль functools в Python предоста…
👁 618 просмотров
Глава от 23.06.2026
Генератор можно остановить. Ты можешь явно вызвать g.close(), но обычно это дела…
👁 687 просмотров
Глава от 22.06.2026
Стандартный модуль json имеет интерфейс командной строки, который может быть пол…
👁 809 просмотров
Глава от 21.06.2026
Все объекты в Python создаются с помощью вызова метода __new__. Даже если вы опр…
👁 837 просмотров
Глава от 20.06.2026
🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 ht…
👁 750 просмотров
Глава от 18.06.2026
Python позволяет перегружать многие разные операторы, и оператор сдвига — один и…
👁 933 просмотров

Популярные посты канала «Python Разработка | Web Backend, Парсинг & Telegram Bots. Пайтон программирование с нуля. Django, FastAPI и SQL. Уроки для начинающих и IT карьера. Coding.»

Как упростить работу с аргументами в командной строке с помощью typer Раньше для CLI-приложений на Python я использовал argparse, потом был…
👁 8 025 просмотров
Создание объекта в Python включает два ключевых этапа. Сначала вызывается метод __new__, который создаёт и возвращает новый объект. Затем вы…
👁 8 023 просмотров
🚀 Как логировать без боли в Python Как настроить логирование в Python один раз — и больше к этому не возвращаться. Обычно начинающие разра…
👁 7 991 просмотров
🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https…
👁 7 983 просмотров
💡 Как избежать повторения кода с помощью functools.partial Как упростить код и избежать дублирования с помощью functools.partial. Допустим…
👁 7 971 просмотров
🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https…
👁 7 941 просмотров
В Python оператор квадратных скобок [] можно переопределить, реализовав магический метод __getitem__. Это позволяет, например, создать объек…
👁 7 919 просмотров
Популярный способ объявить абстрактный метод в Python — это выбросить исключение NotImplementedError: def human_name(self): raise NotIm…
👁 7 841 просмотров
Встроенные значения float в Python используют оборудование вашего компьютера напрямую, поэтому любое значение представляется внутренне в вид…
👁 7 817 просмотров
Иногда в программе нужна очередь — контейнер, куда элементы добавляются с одной стороны и извлекаются с другой. В Python для этого можно исп…
👁 7 805 просмотров
Существует два понятия с похожими названиями, которые легко перепутать: переопределение (overriding) и перегрузка (overloading). Переопреде…
👁 7 770 просмотров
Иногда возникает необходимость выполнить участок кода и проигнорировать все возможные исключения. Это оправдано в случае с плагинами, сторон…
👁 7 752 просмотров
⚠️ Можно знать алгоритмы машинного обучения и всё равно получать плохие результаты. Большинство проблем моделей начинаются с некачественной …
👁 7 743 просмотров
Есть три ситуации, в которых только что созданную переменную нельзя аннотировать типом: распаковка кортежей, циклы for и инструкции with. В…
👁 7 701 просмотров
В Python имя переменной может состоять из одного символа подчёркивания: _. Хотя такие имена обычно недостаточно описательны и их не стоит ис…
👁 7 697 просмотров
Некоторый код может выводить интересующие вас данные в stdout, вместо того чтобы предоставлять API, возвращающий строку, пригодную для испол…
👁 7 656 просмотров
🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https…
👁 7 624 просмотров
Скрытые фичи Enum: как выжать максимум Многие используют Enum как простой список констант. Но у enum.Enum в Python есть куда больше возможн…
👁 7 620 просмотров
Обычно вы взаимодействуете с генератором, запрашивая данные с помощью next(gen). В Python 3 вы также можете отправлять значения обратно в ге…
👁 7 605 просмотров
Чтобы отсортировать словарь по его значениям, используйте функцию sorted с пользовательской функцией ключа: >>> d = dict(a=1, c=3, b=2) >>>…
👁 7 574 просмотров

Связанные темы в других каналах

Каналы из той же тематики, где часто появляются близкие сюжеты
Вся тема →
@canalmaxone
AntiCloudMod
AntiCloudMod — сообщество для тех, кто ценит свободу общения без облачной цензуры. Здесь обсуждают альтернативные мессенджеры, инструменты для приватности и децентрализов…
👥 422 623 · -7 476/7д
@BelgorodDRONE
Информация БПЛА Белгород, Белгородский район
Информация БПЛА Белгород, Белгородский район — специализированный канал в мессенджере Макс, посвященный новостям и информации о беспилотных летательных аппаратах в регион…
👥 185 564 · +7 383/7д
@WylsacomRed
Wylsacom Red
Официальный канал Wylsacom в Max. Тут всё про технологии и жизнь в ногу со временем! Номер заявления для регистрации в РКН: № 6979154178 Розыгрыши: kichaev@wylsacom.med…
👥 161 483 · +328/7д
@biologia89
РОБЛОКС🔷
РОБЛОКС В МАКС! Наш чат: https://max.ru/join/-yBHh5DSEb-WQ8DjAedoLB1fpgDOvQlWpS4PJ7Wqeb8 Реклама: https://clck.ru/3Tmmgx
👥 128 794 · +12 576/7д
@TikTokModCloud
TikTokModCloud
Официальные обновления стабильного мода TikTok Чат: https://clck.ru/3S6mVh По рекламе: https://iimax.ru/dim4ugan
👥 107 981 · +7 368/7д
@na_kruchok
ГЛЕНТ | МЕМЫ
Глент мемы Это фан-сообщество, созданное преданными поклонниками для поддержки творчества Глента. Данный канал НЕ является официальным и ведется фанатом Биржа: telega.…
👥 78 077 · +88/7д
🏷 Темы и теги
#asyncio #python311 #bestpractices #concurrency #telegram bots #python #django #fastapi #парсинг #selenium #Технологии
📋 О канале Python Разработка | Web Backend, Парсинг & Telegram Bots. Пайтон программирование с нуля. Django, FastAPI и SQL. Уроки для начинающих и IT карьера. Coding.
Учим язык Python на практике. Создание веб-приложений: Django, Flask, FastAPI. Пишем ботов для Телеграм на Aiogram. Парсинг сайтов (Web Scraping): Selenium, BeautifulSoup (BS4), Scrapy. Работа с базами данных (PostgreSQL, Redis, SQL) и API. Асинхронное программирование (Asyncio). Настройка Docker, Git и Linux. Алгоритмы, задачи с собеседований и Roadmap для Junior Python Developer.
🔍 Архив всех постов Макс
Поиск по 14,325,125 постам из 202,587 каналов
Подключить за 490 ₽/мес →
Удалить пост или канал с МАКСОТЕКИ
Заявка подтверждается через бота Макс: нужно быть администратором канала и добавить бота МАКСОТЕКИ в администраторы. После проверки канал или конкретный пост скрывается с сайта.
📊 Аналитика канала «Python Разработка | Web Backend, Парсинг & Telegram Bots. Пайтон программирование с нуля. Django, FastAPI и SQL. Уроки для начинающих и IT карьера. Coding.» ➡️ Перейти в канал Макс
Заявка в МАКСОТЕКА
Добавьте свой канал в каталог
Зарегистрируйтесь в личном кабинете и добавьте канал за пару кликов.
Перейти в личный кабинет →

Бесплатная регистрация, быстрая модерация.