
Обработка потока данных в Python: чек-лист приёмов
Что проверить, когда файл на 50 ГБ не влезает в память, генератор течёт по неочевидной причине, а пайплайн падает на середине потока. Чек-лист рабочих приёмов для Python 3.11+.

Что проверить, когда файл на 50 ГБ не влезает в память, генератор течёт по неочевидной причине, а пайплайн падает на середине потока. Чек-лист рабочих приёмов для Python 3.11+.

Global Interpreter Lock не даёт двум потокам CPython выполнять байткод одновременно. В 3.13 появился экспериментальный режим без GIL. Разбираем, почему блокировка вообще существует и что меняется, когда её убирают.

Что бросать из публичной функции библиотеки: ValueError или собственный класс. Разбираем цену обоих подходов, иерархию исключений и как не сломать код тех, кто вас импортирует.

Отправка письма прямо в обработчике запроса тормозит ответ и роняет его при сбое SMTP. Разбираем, как вынести медленную работу в очередь: Celery, RQ или встроенные брокеры, где каждый подход ломается и что выбрать.

Почему объект в CPython не всегда освобождается сразу после del, как подсчёт ссылок уживается с циклическим сборщиком и где эта связка ломается под нагрузкой.

Разбираем на конкретных изменениях API, где заканчивается минорная версия и начинается мажорная. Что считается ломающим изменением в Python, а что нет, и во что это обходится вашим пользователям.

Разбираем, во что компилятор CPython превращает исходник, как стековая виртуальная машина его исполняет и что показывает модуль dis на реальных примерах.

Один переименованный аргумент — и после pip install --upgrade у пользователей падает прод. Разбираем, какие изменения в публичном API Python-библиотеки считаются ломающими и как их избегать.

Скрипт с multiprocessing.Pool на Windows уходит в бесконечный форк, на Linux течёт память, а в Jupyter молча зависает. Разбираем ошибки, из-за которых пул процессов ведёт себя не так, как задумано.

Аннотации перестают помогать, когда проект перерастает несколько модулей. Разбираем, где выбирать Protocol вместо ABC, как TypeVar связывает типы и во что упирается mypy на больших кодовых базах.

Как зашифровать бэкапы на бою и не превратить их в мусор при первом же большом файле, ротации ключа или падении процесса посреди записи. Разбор ошибок на cryptography 42.x.

Скачать 500 файлов по одному — полчаса ожидания сети. Разбираем, когда потоки реально ускоряют загрузку в Python, где начинается предел и чем пул отличается от asyncio на практике.