Профилирование программы Python, которая вызывает параллельные внешние программы

Аналогично этому вопросу о профилировании многопроцессорного кода...

Мне нужно профилировать мою кодовую базу, и я планировал использовать cProfile. Эта программа по существу является генетическим алгоритмом, который выполняет функцию оценки параллельно. Самое интересное, что эта функция оценки извне вызывает другую программу Python через командную строку.

Можно ли использовать cProfile для профилирования всего цикла? По сути, я намеревался начать профилирование внутри моей рабочей функции (кумулятивное время, pcalls, накладные расходы памяти и т. д.), однако я обеспокоен тем, что внешние программы не будут видны профилировщику.


person the_e    schedule 23.09.2014    source источник


Ответы (1)


Вы правы, что внешние программы не будут «видны» профайлеру. Модуль cProfile добавляет программные ловушки в ваш код, которые запускают различные счетчики событий, таких как вызовы функций или возвраты. Вы сможете увидеть свой вызов subprocess.call() или того, что вы используете для выполнения внешних команд, но вы не увидите никаких подробностей о выполнении внешней команды. Вы сможете увидеть, как долго вызов заблокирован, поэтому вы получите представление о том, сколько времени занимает выполнение внешней команды, но вы не получите подробности их профилирования.

При этом нет никаких причин, по которым вы не можете добавить модуль cProfile в скрипт вызванный, и вы получите результаты профиля как для основного скрипта, так и для вызванного внешнего скрипта. Они просто не будут в одном файле.

person skrrgwasme    schedule 29.09.2014
comment
Собственно, что я и сделал. Я просто оснастил свой внешний вызов cProfile только просмотром этого модуля. - person the_e; 08.10.2014