Py-Spy: Семплирующий профилировщик для программ на Python
Об интересном инструменте, позволяющем профилировать запущенные процессы
Не так давно свет увидело очередное приложение для профилирования под названием py-spy.
Не смотря на то, что написано оно на Rust, а не на Питоне, автор предусмотрел возможность его установки из PyPI:
Будучи профилировщиком,
Приложение может и запустить скрипт, и подключиться к уже работающему процессу. Важно отметить, что его использование не требует модификации кода приложения, а исполняется профилировщик отдельным процессом (не встраивается в процесс приложения). При таких характеристиках
Этот профилировщик считывает память процесса напрямую, находит нити и далее для каждой расследует стек вызовов.
Итак, допустим, что у вас имеется работающий процесс приложения. Вы находите идентификатор процесса (PID) и подключаетесь к нему:
Получаете интерактивный сеанс, в котором выводится информация о процессе. По умолчанию информация агрегируется по строкам кода, но имеется возможность агрегировать и по именам функций. Помимо этого, если хочется, можно изменить количество образцов (семплов), собираемое в секунду. Для тех, кому удобнее разбираться по графику, предсмотрена возможность представить процесс в виде изображения .svg.
Исходники профилировщика и дополнительная информация, на английском доступа в репозитории.
Удачного разбора полётов.
Не смотря на то, что написано оно на Rust, а не на Питоне, автор предусмотрел возможность его установки из PyPI:
$ pip install py-spy
Будучи профилировщиком,
py-spy
позволяет вам отследить, в каком месте кода ваше приложение проводит больше всего времени. Такая информация может быть полезна, например, при отладке или при поиске узких мест.Приложение может и запустить скрипт, и подключиться к уже работающему процессу. Важно отметить, что его использование не требует модификации кода приложения, а исполняется профилировщик отдельным процессом (не встраивается в процесс приложения). При таких характеристиках
py-spy
можно использовать и с работающими боевыми процессами. Этот профилировщик считывает память процесса напрямую, находит нити и далее для каждой расследует стек вызовов.
Внимание
Чтобы разбираться в структуре памяти приложения
py-spy
носит с собой инструкции для различных версий интерпретатора Питона — проверьте, что используемая вами версия интерпретатора поддерживается. Кроме того, на данном этапе недоступно отслеживание функций уровня C, Cython и пр.Итак, допустим, что у вас имеется работающий процесс приложения. Вы находите идентификатор процесса (PID) и подключаетесь к нему:
$ py-spy --pid 9362
Получаете интерактивный сеанс, в котором выводится информация о процессе. По умолчанию информация агрегируется по строкам кода, но имеется возможность агрегировать и по именам функций. Помимо этого, если хочется, можно изменить количество образцов (семплов), собираемое в секунду. Для тех, кому удобнее разбираться по графику, предсмотрена возможность представить процесс в виде изображения .svg.
Исходники профилировщика и дополнительная информация, на английском доступа в репозитории.
Удачного разбора полётов.
Категории
Язык
Область
ЯП
Уровень
Аспект языка
На заметку
У нас есть новостная группа в Telegram. Там же можно обсудить интересующие вопросы. Ссылка в самом низу страницы.