Python 3.15 приручает статистический профайлер: больше не надо гадать на кофейной гуще

В Python 3.15 появился встроенный статистический профайлер — теперь можно узнать, где тормозит код, не превращая его в ёлку с декораторами.
Наконец-то в стандартной библиотеке Python появился profiling.sampling — модуль для статистического профилирования. Если вы устали от cProfile, который каждые пять секунд напоминает о себе простыней цифр, или от ручных замеров с time.time() — это ваш шанс.
Статистический профайлер работает по принципу "семплирования": он периодически заглядывает в стек вызовов и записывает, где в этот момент находится интерпретатор. Никаких декораторов, никаких перехватов каждого вызова — просто лёгкий мониторинг с минимальным оверхедом. Идеально для продакшена, где каждый лишний процент CPU — это потерянные деньги (или нервы девопса).
Главная фишка: профайлер собирает данные, не изменяя поведение программы. Это как подглядывать за кодом через замочную скважину, а не ставить его под прожекторы. Под капотом — механизм на основе сигналов ОС, так что работает он даже с многопоточными приложениями. Правда, не стоит ждать от него наносекундной точности — статистика есть статистика.
Кому это нужно?
- Тем, кто ищет узкие места в продакшн-сервисах без риска сломать всё.
- Разработчикам, которые хотят быстро прикинуть, где код "тормозит", не лезут в дебри.
- Всем, кто устал от фразы "а у меня не воспроизводится".
Пока модуль экспериментальный, но уже сейчас можно попробовать: достаточно импортировать profiling.sampling и запустить. Документация обещает, что он будет работать даже с asyncio — а это уже серьёзная заявка.
Комментарий студии METABYTE: Статистический профайлер — как хороший врач: не лечит, но точно указывает, где болит. Если ваш проект страдает от необъяснимых лагов, а деплой превращается в рулетку — возможно, стоит заглянуть под капот с новым инструментом. Мы в METABYTE тоже обожаем профилировать, но предпочитаем делать это до того, как код улетит в прод.