Подтвердить что ты не робот

MacOSX Инструменты для профилирования кода Python

MacOSX Xcode Instruments действительно хорош для профилирования собственного кода. Тем не менее, у меня также есть огромный кусок вызовов Python в моих столах. Могу ли я каким-то образом сделать инструменты Python-осведомленными?

Одним из решений, о котором я мог подумать, является то, что он видит некоторый кадр PyEval_EvalFrameEx, который он ищет в своих локальных переменных/параметрах для разделения различных вызовов Python и показывает мне некоторую информацию о вызове.

Я не спрашиваю про только профайлер Python. Я хочу профилировать свой собственный код. Но в этом профилировании собственного кода я хочу добавить некоторые дополнительные сведения для анализа и перевода фреймов стека Python.

4b9b3361

Ответ 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