
multiprocessing и shared_memory в Python: что внутри
Форк, pickle через pipe и участок разделяемой памяти — три разных механизма под одним модулем multiprocessing. Разбираем, где копируются данные, а где нет, и почему это влияет на скорость.

Форк, pickle через pipe и участок разделяемой памяти — три разных механизма под одним модулем multiprocessing. Разбираем, где копируются данные, а где нет, и почему это влияет на скорость.

Сервис ест CPU, но приложить strace или добавить профайлер в код нельзя — на нём висят живые запросы. py-spy снимает стек работающего процесса извне, без рестарта и без правок кода.

Пул из восьми процессов, каждый копирует 2 ГБ массива через pickle — и обработка встаёт на десятки секунд. Разбираем, где Python тратит время на сериализацию и как shared_memory убирает эти копии.

Токен, вбитый прямо в код, утекает в git. Токен без таймаута вешает поток на минуты. Разбираем, как хранить, обновлять и передавать токены в requests и httpx без граблей.

Пакет с ленивыми импортами ради совместимости грузился 380 мс на старте. Разбираем, где утекает время при поддержке старого API и как вернуть 40 мс без слома пользовательского кода.

Схему меняете миграциями, а перелив данных гоните руками в проде на глазах у пользователей. Разбираем, чем платит каждый из подходов к миграции данных и когда какой выбрать.

async with молча пропускает освобождение ресурсов при отмене задачи, ломает порядок выхода при вложенности и не работает в синхронном коде. Разбираем, где именно это происходит и что мерить.

Библиотека вышла с версией 2.4.1, CI собрался зелёным, а через час прод начал падать с TypeError. Разбираем, где обратная совместимость дала трещину и как этого избежать.

Переименовали параметр — и у сотни проектов упал импорт. Разбираем, какие изменения в публичном API ломают чужой код и на что смотреть в ревью, прежде чем нажать merge.

Один необязательный ключ, который приходил строкой вместо числа, ронял отчёт раз в неделю. Разбираем, где протекает валидация в Python-сервисе и чем pydantic отличается от ручных проверок под нагрузкой.

asyncio.gather молча продолжает работу, когда одна из задач падает, а её соседи повисают в фоне. TaskGroup из Python 3.11 закрывает эту дыру структурной отменой и группировкой ошибок.

Внешне библиотека работает, но каждое обновление ломает чужой код. Разбираем, где граница между публичным и приватным на самом деле проходит и почему её нарушают первой.