Параллелизм в Python

11 участников

О чём курс

Этот курс представляет собой интенсивную программу для разработчиков, стремящихся выйти на новый уровень профессионального мастерства и претендовать на повышение грейда. Основная цель обучения — научить вас уверенно применять принципы конкурентности и параллелизма в реальных продакшен-проектах. Многие разработчики сталкиваются с тем, что теоретические знания об асинхронности, потоках и процессах, почерпнутые из статей или видео, остаются разрозненными и не находят применения в работе. Этот курс закрывает данный пробел, предлагая глубокое погружение в архитектурные решения, которые действительно работают под высокой нагрузкой.

Программа курса построена на принципе постоянной практики. Вы не просто изучаете теорию, а вместе со спикером разбираете ошибки в реальном продакшен-коде и параллельно разрабатываете собственный проект. В процессе обучения вы научитесь работать с нетипичными IO/CPU нагрузками, имитировать продакшен-среду с нагрузкой до 1000 RPS, использовать брокеры для обработки потоков данных из Kafka, настраивать Websockets для трансляции лайв-событий, а также внедрять локальные очереди и внешние API с распределенными rate limiter’ами и локами. Особое внимание уделяется распределенным системам, где вы освоите использование мьютексов и семафоров для координации запросов.

Курс идеально подходит для тех, кто уже владеет FastAPI, PostgreSQL, Docker и Git, но чувствует нехватку целостной картины при проектировании высоконагруженных систем. Вы научитесь понимать, какой инструмент выбрать под конкретную задачу, как не блокировать событийный цикл и как правильно распределять нагрузку между потоками и процессами. На выходе вы получите не только теоретическую базу, но и готовый проект в портфолио, а также навык профилирования и трейсинга асинхронных приложений, что позволит вам самостоятельно находить и устранять узкие места в коде.

Формат обучения включает еженедельные встречи и практические домашние задания, которые максимально приближены к реальным задачам, с которыми сталкиваются инженеры в крупных компаниях. Вы научитесь работать с базой данных без потери производительности, координировать работу нескольких инстансов сервиса и грамотно выносить тяжелые вычисления в фоновые задачи. Этот курс — ваша возможность перестать бояться сложных архитектурных вызовов и начать проектировать масштабируемые и отказоустойчивые системы, которые выдерживают любые нагрузки.

Программа обучения

Неделя 1. Фундамент конкурентности и параллелизма

  • Разбираем конкурентность и параллелизм по кирпичикам: как задействуются ядра процессора, как переключаются потоки, и как работают сокеты
  • GIL, IO-bound и CPU-bound: что именно блокирует GIL, как он влияет на каждый тип нагрузки и почему CPU-bound задача не ускоряется от async
  • Корутины и событийный цикл изнутри: почему это не просто "тупая" очередь задач, и как его не заблокировать
  • Корутины, потоки, процессы, воркеры: разница, когда что выбрать
  • Tasks и Futures: create_task, получение результата, обработка исключений, отмена и потеря задач
  • gather и TaskGroup: как ведёт себя группа задач при падении одной из них и как безопасно запускать набор задач
  • Домашнее задание: Сравнить последовательный и параллельный запуск корутин, получить блокировку event loop. Поработать с запуском и отменой задач. Вынести блокирующую функцию в поток, CPU-задачу — в процесс.
  • Результат недели: Уложишь в голове, как устроены потоки, процессы, корутины и воркеры, разберёшься с базой асинхронности и, глядя на любую задачу или код, будешь сразу понимать, каким инструментом её решать.

Неделя 2. Работа с базой данных и внешними API под нагрузкой

  • Знакомство с production-style микросервисом заказов: где в нём прячется конкурентность и что ломается под нагрузкой в первую очередь
  • Как устроены большинство Python библиотек для работы с БД, Redis, брокером, и как не выстрелить себе в ногу при больших нагрузках
  • Параллельные запросы к базе PostgreSQL: что такое thread-safe и coroutine-safe, и почему типичный паттерн Repository ломается в этом случае
  • as_completed и wait: забираем результаты по мере готовности, не дожидаясь самого медленного
  • Домашнее задание: Реализовать HTTP-клиенты к внешним API и параллельно подтягивать данные при создании события. На превью заказа параллельно собирать сущности из БД, не шаря одну сессию. Добавить таймауты, обработку ошибок и retry на временные ошибки.
  • Результат недели: Научишься ходить в базу и внешние API параллельно, переиспользовать TCP-соединения и на реальных примерах увидишь, насколько это ускоряет сервис. Погрузишься в параллельные запросы, которые нужны каждый день, и поймёшь, какой код безопасно выполнять конкурентно.

Неделя 3. Координация в распределенной системе

  • Что меняется, когда сервис живёт запущен в нескольких инстансах?
  • Как согласовать всех воркеров, даже если они живут на разных серверах?
  • Паттерн Single Flight: как из тысячи одинаковых запросов пропустить в базу только один (решение проблемы Thundering herd)
  • Распределенная блокировка на примере протухшего токена: продлеваем общий токен внешнего API так, чтобы это сделал ровно один воркер, избежав 429 ошибок
  • Состояние прямо в памяти приложения: когда кэша уже мало и приходится жертвовать оперативкой ради производительности
  • Домашнее задание: Добавить Redis кэш и защитить популярное событие от лавины запросов через паттерн single flight через распределенную блокировку. Решить проблему thundering herd через распределенный мьютекс для обновления протухшего токена. Подтягивать snapshot конфига в память фоновой задачей.
  • Результат недели: Шагнёшь в распределённые системы и начнёшь решать серьезные проблемы: удерживать базу под наплывом запросов, согласовывать состояние между воркерами и не дать им наперегонки атаковать общий ресурс или внешний API.

Неделя 4. Фоновые задачи. От простых методов до production-ready

  • TaskIQ и Celery: когда задачу пора отдавать воркеру и чем опасны фоновые задачи
  • Как снизить нагрузку на сервис, используя поллинг для длинных
  • Паттерн Transactional outbox: как не допустить расхождения данных между базой, taskiq/celery и приложением
  • Как ускорить асинхронное приложение через вынос блокирующего кода в потоки. Учимся распознавать такой код
  • Домашнее задание: Вынести обработку покупок в Taskiq, отдавая статус для поллинга. Регулярно проверять билет и обновлять статус. Генерировать QR-код синхронным SDK во внешнем потоке.
  • Результат недели: Познакомишься с самыми популярными инструментами для фоновых задач в Python и поймёшь, какие проблемы с ними связаны. Научишься сам выбирать инструмент под задачу: когда выносить CPU-нагрузку, когда I/O и что для этого взять.

Неделя 5. Очереди, батчинг и потоковая обработка событий из Kafka

  • Зачем использовать очередь asyncio.Queue внутри приложения
  • Батчинг событий в ClickHouse: как снизить нагрузку с базы в сотни раз
  • Как действовать, если не успеваешь обрабатывать входящий поток сообщений из брокера
  • Знакомимся со вторым микросервисом аналитики, с получением тысяч событий из Kafka
  • Как выстроить пайплайн по переливу данных из Kafka в Websocket для рил-тайм слежения за курьерами на карте
  • Домашнее задание: Отправлять аналитику в фоновом режиме, чтобы запрос её не ждал. Копить события в очереди и писать в ClickHouse батчами. Обрабатывать данные из Kafka.
  • Результат недели: Научишься работать с Kafka асинхронно и с вебсокетами, делать батчинг данных и не перегружать базу, что критично важно на продакшене.

Неделя 6. Профилирование и трейсинг Python приложений

  • Выносим CPU-нагрузку правильно: какие вычисления отпускают GIL и почему от этого зависит выбор между потоками и процессами
  • Тяжёлый отчёт уезжает в воркер: клиент опрашивает статус и забирает готовый файл
  • CPU-расчёты по перемещениям курьеров и генерация Excel — в ProcessPoolExecutor, чтобы сервис не замирал
  • Ловим блокировки event loop: лаги, медленные коллбеки и охота за тем, что подвешивает сервис
  • Трейсинг сквозного запроса через contextvars: видим весь путь запроса, даже когда всё перемешано в логах
  • Graceful shutdown: гасим сервис с фоновыми задачами, очередями и воркерами без потери данных
  • Домашнее задание: Реализовать запуск отчёта о продажах через Taskiq с поллингом и скачиванием файла. Собрать аналитику по продажам и сгенерировать Excel отчет, вынеся CPU-вычисление в процесс. Добавить мониторинг блокировок event loop и трейсинг.
  • Результат недели: Разберёшься, как правильно выносить CPU-нагрузку, и научишься профилировать и трейсить асинхронный код, находя узкие места под нагрузкой.
Складчина создана 25 июня 2026 г. · описание обновлено 28 июня 2026 г.

Теги курса

Инструменты
7 676 ₽ 39 000 ₽