Инструмент командной строки и веб-интерфейс для визуализации и анализа данных профилирования в формате profile.proto.
benfred/py-spy
Сэмплирующий профилировщик Python-программ, который подключается к работающим процессам без изменения кода и перезапуска.
- Звёзды
- 15,628
- Форки
- 560
- Открытые issues
- 236
- Последний коммит
- 8 часов назад
Что это?
py-spy помогает понять, на что уходит время в работающей Python-программе. Он собирает сэмплы целевого процесса извне, поэтому не нужно менять код, добавлять импорты или перезапускать программу. py-spy написан на Rust и работает в отдельном от профилируемого процесса процессе, поэтому его накладные расходы достаточно низки для использования на production-сервисах.
У инструмента три подкоманды. `record` сохраняет профили в формате flame graph SVG, speedscope или raw; `top` показывает в реальном времени непрерывно обновляемый список самых горячих функций; а `dump` выводит текущие стеки вызовов всех потоков, при необходимости — вместе с локальными переменными. Дополнительные параметры позволяют настроить частоту сэмплирования, собирать сэмплы только при удержании GIL, включать кадры нативных расширений на C/C++ или Cython, а также отслеживать дочерние процессы, например воркеры multiprocessing или gunicorn.
py-spy работает на Linux, macOS, Windows и FreeBSD и поддерживает широкий диапазон версий CPython. В Linux для подключения к существующему PID обычно нужны права root или ослабленные настройки ptrace; в Docker и Kubernetes контейнеру требуется capability SYS_PTRACE.
Ключевые возможности
- 01Подключается к работающим Python-процессам по PID без изменения кода и перезапуска.
- 02Сохраняет flame graph в SVG, профили speedscope или данные в raw-формате.
- 03Показывает в реальном времени функции, потребляющие больше всего времени, с помощью `top`.
- 04Выводит стеки вызовов всех потоков, при необходимости — с локальными переменными.
- 05Позволяет отбирать потоки, удерживающие GIL, и профилировать нативные расширения.
- 06Отслеживает дочерние процессы, например процессы multiprocessing или воркеры gunicorn.
Сценарии использования
- Поиск медленных функций в production-сервисе на Python без повторного развёртывания.
- Диагностика зависшего процесса с помощью дампа текущих стеков потоков.
- Профилирование скрипта, запущенного через py-spy record.
- Анализ узких мест по CPU в расширениях на Cython или C вместе с кадрами Python.
Быстрый старт
- 1
Установить готовый бинарный файл из PyPI
pip install py-spy - 2
Профилировать работающий процесс и создать flame graph
py-spy record -o profile.svg --pid 12345 - 3
Посмотреть сводку работающего процесса в реальном времени в стиле top
py-spy top --pid 12345
Что важно знать
- В Linux для профилирования другого процесса обычно требуются права root.
- В OSX права root требуются всегда, а System Integrity Protection блокирует профилирование встроенного /usr/bin/python.
- Профилирование нативных расширений с помощью --native доступно только для некоторых сочетаний платформ и архитектур.
Темы
Частые вопросы
- Что такое py-spy?
- Сэмплирующий профилировщик Python-программ, который подключается к работающим процессам без изменения кода и перезапуска. py-spy помогает понять, на что уходит время в работающей Python-программе. Он собирает сэмплы целевого процесса извне, поэтому не нужно менять код, добавлять импорты или перезапускать программу. py-spy написан на Rust и работает в отдельном от профилируемого процесса процессе, поэтому его накладные расходы достаточно низки для использования на production-сервисах.
- py-spy можно использовать бесплатно? Какая у него лицензия?
- py-spy распространяется с открытым исходным кодом под лицензией MIT. Перед использованием в коммерческих продуктах проверьте условия лицензии.
- py-spy всё ещё поддерживается?
- Активно поддерживается. Последний коммит в py-spy — 6 нояб. 2026 г..
- Для чего можно использовать py-spy?
- Поиск медленных функций в production-сервисе на Python без повторного развёртывания. Диагностика зависшего процесса с помощью дампа текущих стеков потоков. Профилирование скрипта, запущенного через py-spy record. Анализ узких мест по CPU в расширениях на Cython или C вместе с кадрами Python.
- Как установить py-spy?
- Установить готовый бинарный файл из PyPI: pip install py-spy Профилировать работающий процесс и создать flame graph: py-spy record -o profile.svg --pid 12345 Посмотреть сводку работающего процесса в реальном времени в стиле top: py-spy top --pid 12345
- Где скачать py-spy?
- Исходный код и инструкции по установке — на GitHub: https://github.com/benfred/py-spy
Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.
Похожие проекты
Профайлер с наносекундной точностью для анализа кадров и выборочного профилирования игр и других приложений на C/C++, с телеметрией в реальном времени.
Профилировщик Python, показывающий загрузку CPU и GPU, а также потребление памяти для каждой строки кода; может предлагать оптимизации с помощью ИИ.
Низкоуровневый по накладным расходам сэмплирующий профилировщик Java: собирает профили CPU, аллокаций, блокировок и нативной памяти без смещения safepoint.
Бесплатный инструмент для Windows, который помогает выявлять проблемы с производительностью CPU и памяти, особенно в коде, работающем на .NET runtime.
Профилировщик стека вызовов Python, который показывает, на что уходит время в коде, и выводит результаты в консоль, HTML и других форматах.