Перейти к основному контенту
Tech Path Finder
КурсыИнтервьюКод-ревьюБлог
Tech Path Finder

Персонализированный путеводитель в IT. Квизы, мок-интервью, код ревью и аналитика прогресса.

@potapov_me

Платформа

  • Курсы
  • Прогресс
  • Мок-интервью
  • Код ревью
  • Живое ревью с ИИ
  • Тренажёр переговоров
  • Закладки

Контент

  • Блог
  • Главная
  • Обратная связь

Компания

  • О проекте
  • Тарифы
  • Условия использования
  • Конфиденциальность
  • Согласие на обработку данных
  • Cookie
  • Реквизиты

Аккаунт

  • Войти
  • Зарегистрироваться
  • Профиль

© 2026 Tech Path Finder. Все права защищены.

·ИП Потапов К.С.·Политика конфиденциальности·
Сделано с ❤️ в России
  1. Интерактивный мониторинг
top

Интерактивный мониторинг

Команда top, live-мониторинг в терминале, сортировка и фильтрация

Интерактивный мониторинг с командой top

Как htop, но для Python-функций. В реальном времени.

Команда top показывает использование CPU Python-функциями в реальном времени. Это ваш инструмент для быстрого понимания того, что происходит прямо сейчас.

#Базовое использование

py-spy top --pid <PID>

Пример:

# Найдите PID Python-процесса ps aux | grep python # Запустите top py-spy top --pid 12345

Вы увидите:

py-spy top (0.1s samples)

  Total Samples 452
  Command        python3.9 my_app.py

   %Self  %Total    Self Time  Total Time    Count    Function
   45.2%   45.2%      0.045s      0.045s       12     process_data (my_app.py:25)
   23.1%   68.3%      0.023s      0.068s        8     parse_json (my_app.py:42)
   15.4%   15.4%      0.015s      0.015s       45     <listcomp> (my_app.py:45)
    8.7%   84.0%      0.009s      0.084s        3     fetch_from_db (db.py:12)
    5.2%    5.2%      0.005s      0.005s      120     str.replace
    2.4%    2.4%      0.002s      0.002s       34     dict.__setitem__

#Понимание колонок

КолонкаОписание
%SelfПроцент CPU, проведённый непосредственно в функции (без учёта вызовов)
%TotalПроцент CPU в функции включая вызванные ею функции
Self TimeВремя в секундах, проведённое в функции (без вызовов)
Total TimeВремя включая вызванные функции
CountКоличество сэмплов, где функция была в стеке
FunctionИмя функции и местоположение (файл:строка)

#%Self vs %Total

Ключевое различие:

  • %Self: Время, потраченное внутри функции (циклы, вычисления)
  • %Total: Время в функции + всех функциях, которые она вызвала

Пример:

def outer(): time.sleep(0.5) # Self time inner() # Вызов другой функции def inner(): time.sleep(0.3) # Self time

В top:

  • inner: %Self = 37.5%, %Total = 37.5% (0.3с из 0.8с)
  • outer: %Self = 62.5%, %Total = 100% (0.5с self + 0.3с inner)

#Сортировка

Нажмите клавиши для сортировки:

КлавишаСортировка
sПо Self Time (по умолчанию)
tПо Total Time
cПо Count (количество сэмплов)

Когда что использовать:

  • s (Self): Найти функции, которые сами тратят много CPU
  • t (Total): Найти функции, которые ответственны за общее время (включая вызовы)
  • c (Count): Найти часто вызываемые функции

#Фильтрация

#Фильтр по имени функции

Нажмите / и введите имя:

/filter process

Покажет только функции, содержащие "process" в имени.

#Фильтр по файлу

/filter .py

Покажет только Python-файлы (исключит встроенные функции).

#Сброс фильтра

Нажмите Esc для сброса.

#Пауза

Нажмите Пробел для паузы обновления. Удобно для изучения снимка.

#Выход

Нажмите q или Ctrl+C.

#Практический пример: Отладка медленного API

#Сценарий

У вас есть Flask-приложение, которое отвечает 3 секунды вместо 200 мс.

#Шаг 1: Запустите приложение

flask run --port 5000

#Шаг 2: Найдите PID

lsof -i :5000 # или ps aux | grep flask

#Шаг 3: Запустите py-spy top

py-spy top --pid <PID>

#Шаг 4: Сделайте запрос

В другом терминале:

curl http://localhost:5000/api/slow-endpoint

#Шаг 5: Наблюдайте

В top вы увидите:

py-spy top (0.1s samples)

  Total Samples 312
  Command        python3.9 app.py

   %Self  %Total    Self Time  Total Time    Count    Function
   52.1%   52.1%      1.56s       1.56s        1     slow_endpoint (app.py:45)
   28.3%   28.3%      0.85s       0.85s       45     expensive_computation (utils.py:12)
   12.4%   12.4%      0.37s       0.37s       12     json.dumps
    5.2%    5.2%      0.16s       0.16s      234     str.split
    2.0%    2.0%      0.06s       0.06s       89     list.append

Вывод: expensive_computation занимает 28% CPU — это кандидат на оптимизацию или кэширование.

#Профилирование с запуском

Можно запустить программу сразу с top:

py-spy top -- python my_script.py

py-spy запустит скрипт и начнёт мониторинг.

#Частота обновления

По умолчанию py-spy обновляется каждые 0.1 секунды (10 раз в секунду).

Для изменения используйте --interval:

# Обновление каждые 0.5 секунды py-spy top --interval 0.5 --pid 12345

#Многопоточные приложения

top показывает агрегированные данные по всем потокам. Если нужно видеть каждый поток отдельно, используйте record с последующим анализом в speedscope.

#Сравнение: top vs record

Характеристикаtoprecord
РежимРеальное времяЗапись в файл
ИнтерактивностьДа (сортировка, фильтр)Нет (только просмотр SVG)
ИсторияТолько текущее состояниеМожно перемотать, изучить детали
ЭкспортНетSVG, speedscope, raw
Лучше дляБыстрого анализа «что сейчас»Глубокого анализа, отчётов

Рекомендация: Используйте top для быстрого понимания ситуации, record для детального анализа и сохранения результатов.

#Ограничения

  1. Нет истории: Видите только текущий срез. Для истории используйте record.

  2. Агрегация по потокам: Не показывает разделение по потокам.

  3. Терминал: Требует терминал, нельзя открыть в браузере.

#Практическое задание

  1. Запустите любой долгий Python-скрипт
  2. Найдите PID
  3. Запустите py-spy top --pid <PID>
  4. Нажмите s — сортировка по Self Time
  5. Нажмите t — сортировка по Total Time
  6. Нажмите / и введите имя функции
  7. Нажмите Пробел для паузы
  8. Нажмите q для выхода

Ключевая идея: top — это ваш быстрый инструмент для понимания «что происходит прямо сейчас». Не требует записи, не создаёт файлов, показывает результат немедленно.

Далее: Снимки стека вызовов