
Кеш результатов в Python: functools, TTL и свои декораторы
Один и тот же запрос считается по десять раз, а ускорить его можно строкой декоратора. Разбираем lru_cache, cached_property и когда пора писать свой кеш с временем жизни.

Один и тот же запрос считается по десять раз, а ускорить его можно строкой декоратора. Разбираем lru_cache, cached_property и когда пора писать свой кеш с временем жизни.

Разбираем, когда ручной DI через параметры функций справляется сам, а когда стоит подключить контейнер вроде dependency-injector, и чем платишь за каждый вариант.

Почему obj.field возвращает не то, что вы туда положили, и как Django строит поля модели. Разбор протокола дескрипторов, порядка поиска атрибутов и мест, где механизм ломается.

Что проверить, когда файл на 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 молча зависает. Разбираем ошибки, из-за которых пул процессов ведёт себя не так, как задумано.