Как работает профилирование Python-приложений? В чем разница между детерминированными профайлерами, например cProfile, и статистическими, например py-spy, и какой из них безопаснее запускать на работающем продакшене под нагрузкой?

cProfile фиксирует события вызовов и возвратов, а sampling-профайлер периодически снимает стеки. Под нагрузкой обычно начинают с короткого sampling-сеанса: он меньше вмешивается, но даёт статистическую оценку.

Короткий ответ

Что ответить на собеседовании

cProfile фиксирует события вызовов и возвратов, а sampling-профайлер периодически снимает стеки. Под нагрузкой обычно начинают с короткого sampling-сеанса: он меньше вмешивается, но даёт статистическую оценку.

Подробный разбор

Ответ с пояснениями

cProfile фиксирует события вызовов и возвратов, а sampling-профайлер периодически снимает стеки. Под нагрузкой обычно начинают с короткого sampling-сеанса: он меньше вмешивается, но даёт статистическую оценку.

Детерминированный профиль полезен для числа вызовов и детальной локализации, однако его накладные расходы искажают время частых коротких функций. py-spy может подключиться к работающему процессу без изменения приложения. Он тоже не абсолютно бесплатен: важны частота, режим остановки процесса, права и объём записи. Сначала проверьте совместимость и начните с ограниченного времени наблюдения. Не включайте сбор локальных переменных с секретами.

Источник: github.com.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее