cProfile фиксирует события вызовов и возвратов, а sampling-профайлер периодически снимает стеки. Под нагрузкой обычно начинают с короткого sampling-сеанса: он меньше вмешивается, но даёт статистическую оценку.
Как работает профилирование Python-приложений? В чем разница между детерминированными профайлерами, например cProfile, и статистическими, например py-spy, и какой из них безопаснее запускать на работающем продакшене под нагрузкой?
cProfile фиксирует события вызовов и возвратов, а sampling-профайлер периодически снимает стеки. Под нагрузкой обычно начинают с короткого sampling-сеанса: он меньше вмешивается, но даёт статистическую оценку.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
cProfile фиксирует события вызовов и возвратов, а sampling-профайлер периодически снимает стеки. Под нагрузкой обычно начинают с короткого sampling-сеанса: он меньше вмешивается, но даёт статистическую оценку.
Детерминированный профиль полезен для числа вызовов и детальной локализации, однако его накладные расходы искажают время частых коротких функций. py-spy может подключиться к работающему процессу без изменения приложения. Он тоже не абсолютно бесплатен: важны частота, режим остановки процесса, права и объём записи. Сначала проверьте совместимость и начните с ограниченного времени наблюдения. Не включайте сбор локальных переменных с секретами.
Источник: github.com.