← Все навыки

Работа с процессами и потоками в Python

От event loop до процессов и потоков: пишете сервис, нагружаете, переписываете, сравниваете — и получаете трамплин в Go

12 модулей + практика asyncio, threading, multiprocessing Индивидуально с ментором

Для кого этот навык

  • Python-разработчики, которые хотят понять разницу между asyncio, threading и multiprocessing на практике
  • Backend-разработчики, которые хотят писать по-настоящему производительный код и готовятся к переходу на Go
  • Все, кто хочет уверенно отвечать на вопросы по конкурентности на собеседованиях

Что вы получите

Глубокое понимание Как работает async/await под капотом: от генераторов до event loop
Навык нагрузочного тестирования Научитесь измерять производительность и сравнивать подходы на реальных цифрах
Трамплин в Go Понимание процессов и потоков на Python — идеальная база для перехода на Go
Чистая архитектура Ревью кода по принципам чистой архитектуры с ментором

Программа курса

Введение в асинхронность

Зачем нужна асинхронность и как она устроена в Python
  • Синхронный vs асинхронный код: когда что использовать
  • Блокирующие и неблокирующие операции
  • Обзор подходов к конкурентности в Python

Итераторы

Протокол итераторов — фундамент для понимания генераторов
  • Протокол __iter__ и __next__
  • Ленивые вычисления и экономия памяти
  • Создание собственных итераторов

Генераторы

yield, send, throw — мост к корутинам
  • Генераторы как источники данных и как корутины
  • yield from для делегирования генераторов
  • Связь генераторов с async/await

Конкурентность

Threading, multiprocessing, GIL — как устроена параллельность
  • GIL: почему потоки не дают настоящей параллельности в CPython
  • threading для IO-bound, multiprocessing для CPU-bound задач
  • Synchronization primitives: Lock, Semaphore, Event

Многозадачность

Кооперативная vs вытесняющая многозадачность
  • Кооперативная многозадачность: корутины отдают управление сами
  • Вытесняющая многозадачность: ОС переключает потоки
  • Почему async — это кооперативная модель и какие из этого следствия

Дескрипторы

Протокол дескрипторов — продвинутая механика Python
  • __get__, __set__, __delete__ — протокол дескрипторов
  • Data descriptors vs non-data descriptors
  • Как property, classmethod и staticmethod реализованы через дескрипторы

CPU vs IO операции

Когда использовать threading, multiprocessing или asyncio
  • IO-bound задачи: сеть, диск, БД — идеальны для asyncio
  • CPU-bound задачи: вычисления — только multiprocessing
  • Бенчмарки и практические примеры выбора подхода

Event Loop

Как устроен цикл событий — сердце asyncio
  • Архитектура event loop: очередь задач, селекторы, callbacks
  • Как event loop переключает корутины
  • Кастомные реализации event loop

asyncio

Практика работы с asyncio: корутины, await, gather
  • async def, await — синтаксис корутин
  • asyncio.gather, asyncio.wait — параллельный запуск задач
  • Асинхронные контекстные менеджеры и итераторы

Task

Управление задачами: создание, отмена, обработка ошибок
  • asyncio.create_task — запуск корутин в фоне
  • Отмена задач, таймауты, TaskGroup
  • Обработка исключений в асинхронных задачах

Вопросы для собеседований

Типичные вопросы по конкурентности и asyncio на интервью
  • GIL, threading vs multiprocessing — что и когда отвечать
  • Как объяснить event loop и корутины простыми словами
  • Практические задачи на asyncio, которые дают на собеседованиях

Практика: сервис на трёх подходах

Пишете один и тот же сервис тремя способами и сравниваете результаты

  • Реализация сервиса на event loop (asyncio) + нагрузочное тестирование
  • Переписываем на процессы и потоки (multiprocessing / threading) + нагрузочное тестирование
  • Сравнение результатов: где какой подход выигрывает и почему
  • Ревью кода по принципам чистой архитектуры с ментором