Этап 7 из 11 · ≈ 6 ч

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

Основа с Junior

GIL, потоки и процессы, asyncio, event loop, отмена и блокирующие вызовы.

Что важно знать

  • GIL: один поток выполняет байткод в момент времени; потоки помогают при ожидании ввода-вывода, процессы — при вычислениях.
  • asyncio: корутины, event loop, TaskGroup, asyncio.timeout.
  • Блокирующий вызов в корутине останавливает всё — to_thread или асинхронные клиенты.
  • Free-threaded сборка Python 3.13+ без GIL — экспериментальная.

Критерии освоения

Junior ≈ 6 ч

  • Объясняет GIL и разницу threading, multiprocessing и asyncio

Практика. Сравнить время загрузки 50 страниц последовательно, в потоках и в asyncio.

Middle ≈ 10 ч

  • Пишет асинхронный код с TaskGroup, таймаутами и отменой
  • Выносит блокирующие вызовы из event loop
  • Защищает общее состояние в потоках, несмотря на GIL

Практика. Сделать асинхронный сборщик данных из нескольких API с ограничением параллельности, таймаутами и отменой.

Senior ≈ 6 ч

  • Выбирает модель конкурентности под нагрузку сервиса и объясняет влияние free-threaded Python

Практика. Найти и устранить блокировку event loop в асинхронном сервисе под нагрузкой по профилю.

Проверка знаний

Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.

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

Смотреть все
Как работают async и await?Junior

async def создаёт корутину, await — точка, где она отдаёт управление циклу событий, пока ждёт.

Полный разбор
Что будет, если внутри async-функции вызвать блокирующий код?Middle

Встанет весь event loop: блокирующий вызов (time.sleep, requests.get, синхронный драйвер БД, тяжёлое вычисление) не отдаёт управление, и все остальные задачи ждут. Решение — асинхронная библиотека (httpx, asyncpg, aiofiles) или вынос в поток…

Полный разбор
Что меняет сборка Python без GIL (free-threaded)?Senior

Отдельная сборка CPython (python3.13t) без GIL: потоки выполняют Python-код по-настоящему параллельно на разных ядрах. В 3.13 — экспериментальная, в 3.14 — официально поддерживаемая, но не по умолчанию. Цена: медленнее однопоточный код, C-расширения должны…

Полный разбор
Что такое GIL?Junior

GIL — блокировка в CPython: байткод Python в один момент выполняет только один поток.

Полный разбор
Как в asyncio работают отмена задач и таймауты?Middle

task.cancel() бросает CancelledError внутрь корутины в точке ближайшего await. Таймаут — asyncio.timeout() (3.11) или wait_for: по истечении задача отменяется, наружу — TimeoutError. CancelledError нельзя глотать: очистить ресурсы и пробросить дальше.

Полный разбор
Чем отличаются threading, multiprocessing и asyncio?Junior

Потоки и asyncio — для ожидания ввода-вывода, процессы — для вычислений на нескольких ядрах.

Полный разбор
Как запустить несколько корутин одновременно и получить их результаты?Junior

Точка входа — asyncio.run(main()): создаёт цикл событий и выполняет корутину. Несколько корутин одновременно запускают asyncio.gather(a(), b(), c()) — результаты приходят в том же порядке, что и корутины; с Python 3.11 — asyncio.TaskGroup. Если писать await…

Полный разбор
Как пользоваться concurrent.futures и чем ThreadPoolExecutor отличается от ProcessPoolExecutor?Middle

Единый интерфейс пулов: submit возвращает Future, map применяет функцию к итерируемому, as_completed отдаёт результаты по готовности. ThreadPoolExecutor — для ввода-вывода (GIL отпускается на ожидании), ProcessPoolExecutor — для вычислений (свой интерпретатор…

Полный разбор
Нужны ли блокировки в многопоточном Python-коде, если есть GIL?Middle

Нужны: GIL защищает внутренние структуры интерпретатора, а не ваши инварианты. x += 1 — несколько инструкций байткода (прочитать, сложить, записать), и поток может быть прерван между ними — обновления теряются. Общие изменяемые данные защищают threading.Lock…

Полный разбор
Какие ограничения есть у multiprocessing и чем fork отличается от spawn?Middle

Процессы не делят память: аргументы и результаты сериализуются pickle и копируются. Лямбды, локальные функции, открытые файлы и соединения не сериализуются. fork копирует процесс родителя (быстро, но опасно с потоками), spawn запускает чистый интерпретатор и…

Полный разбор

Разборы темы

← Вся карта «Python»

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования