Краткий обзор: https://docs.python.org/3.15/whatsnew/3.15.html#whatsnew315-sampling-profiler
Документация: https://docs.python.org/3.15/library/profiling.sampling.html
Кратко:
- В 3.15
cProfile (написан на C) был перемещен в profiling.tracing- В 3.15
profile (написан на Python) стал deprecated, его уберут в 3.17- Добавили новый
profiling.sampling (кодовое имя `tachyons`), о нем и поговорим- А еще добавили встроенные TUI (на скриншоте) и GUI
Ключевые фичи:
- Almost Zero-overhead: добиваемся такого, за счет того, что переодически получаем готовые стектрейсы работающих процессов, не нужно добавлять инструментацию функций как в
cProfile- Не нужно менять существующий код
- Разные режимы работы:
attach позволяет подключиться к работающему Python процессу, а run позволяет запустить код для профилировки- Разные виды замеров:
--mode wall, --mode cpu, --mode gil, --mode exception- Поддержка тредов
- Поддержка asyncio с флагом
--async-aware, можно смотреть даже suspended tasks с --async-mode=all- Разные форматы вывода информации:
--flamegraph, --pstats, --heatmap, --gecko-
--live вместе с TUI для отображения информации в реальном времени (как в top условном)- Поддержка профилирования до уровня опкодов виртуальной машины, включая специализации
- Гибкая конфигурация буквально всего
Примеры запуска:
-
python -m profiling.sampling run --flamegraph -o profile.html script.py - запускаем скрипты и генерим флеймграф-
python -m profiling.sampling attach --live $YOUR_PID - профилируем работающий процесс и получаем данные в реальном времениНа чем основана работа технически?
- PEP-768 с remote-debugging предоставляет техническую возможность быстро и легко получать семплы из виртуальной машины
- Для asyncio используется новый АПИ для async-aware call-graphs
Личное мнение: очень крутая фича, пока у меня вопросы по TUI / GUI. Не очень понимаю, зачем их затащили в stdlib. Зарепортил пару багов. На маке требуется запускать профилировщик с
sudo -E. Остальное - нравится!Кирилл вот тоже заценил.
Обсуждение: Что вы думаете о данной фиче? Как вы сейчас профилируете ваши приложения в разработке и в проде?
P.S. Последний пост в текущем году. Всех с наступающим! 🎄
| Поддержать | YouTube | GitHub | Чат |
