MacOSX Инструменты для профилирования кода Python
MacOSX Xcode Instruments действительно хорош для профилирования собственного кода. Тем не менее, у меня также есть огромный кусок вызовов Python в моих столах. Могу ли я каким-то образом сделать инструменты Python-осведомленными?
Одним из решений, о котором я мог подумать, является то, что он видит некоторый кадр PyEval_EvalFrameEx
, который он ищет в своих локальных переменных/параметрах для разделения различных вызовов Python и показывает мне некоторую информацию о вызове.
Я не спрашиваю про только профайлер Python. Я хочу профилировать свой собственный код. Но в этом профилировании собственного кода я хочу добавить некоторые дополнительные сведения для анализа и перевода фреймов стека Python.
Ответы
Ответ 1
В соответствии с этим fooobar.com/questions/228115/... инструменты являются интерфейсом графического интерфейса пользователя dtrace. Существует Документация Apple, подтверждающая это и некоторые конкретные статьи OS-X по dtrace в Big Nerd Ranch среди других мест.
Есть патчи, которые могут быть применены к источнику CPython, прежде чем компилировать его для привязки к dtrace. Похоже, что существует или используется для поддержки автоматического создания нового python с dtrace в homebrew, но теперь googling, я не нахожу ссылки на рецепт homebrew с поддержкой провайдера dtrace для текущих выпусков python (2.7.10, 3.4/3.5). Я не пробовал, поэтому, возможно, текущий рецепт работает только с --with-dtrace
при создании.
Существует сообщение от PyTexas 2013: dtrace, Python и You, в котором говорится о том, как включить установку python с поддержкой dtrace (в частности, демонстрируя с Mac) и использование dtrace в командной строке.
Я бы подумал, что после того, как вы установили python с поддержкой dtrace, при его запуске вы сможете увидеть и использовать его в Инструментах. Если вы добавляете интерпретатор python в приложение OS X (либо как .framework, либо какую-то другую форму связи), если на этом python были применены патча dtrace до компиляции, я также думаю, что он будет доступен для работы с в dtrace. Я не пробовал ни того, ни другого, но, учитывая то, что я знаю о dtrace, я считаю, что он должен работать. Если я подтвержу, что это правда, я отправлю обратно.
Ответ 2
Нет никакого инструмента MacOSX для профилирования кода Python.
Лично я использую cProfile. Его внутренний профайлер называется cProfile
. Вы можете использовать его одним из следующих способов:
import cProfile
cProfile.run('print "Hello World!"')
или
python -m cProfile your_own_script.py
Результат будет примерно таким:
>>> cProfile.run('print "Hello World!"')
Hello World!
2 function calls in 0.000 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 <string>:1(<module>)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
Изменить: если вы ищете вызовы на уровне национального уровня. Затем перейдите в strace
(для Linux) и dtruss
(для Mac OSX) или какой-нибудь другой инструмент. В основном вы можете обернуть свой Python script при вызове strace
, и вы сможете просмотреть все свои "родные" вызовы C/С++.
Для других систем Linux используйте:
strace -fetrace=open python your_script.py
или если вы находитесь на Mac OSX:
dtruss -f -t open python your_script.py
Надеюсь, это поможет!
Ответ 3
Существует отличный новый профилировщик GUI, называемый PyVmMonitor. Я еще не получил его для прикрепления к моему запущенному приложению, но я использовал его для создания и анализа профилей из командной строки следующим образом:
python /Applications/PyVmMonitor.app/Contents/MacOS/public_api/pyvmmonitor --profile=yappi my_app.py