tools para mac descargar python macos instruments xcode-instruments

descargar - MacOSX Instruments para perfilar el código de Python



xcode mac (3)

MacOSX Xcode Instruments es realmente genial para crear perfiles de código nativo. Sin embargo, también tengo una gran cantidad de llamadas de Python en mis pilas de llamadas. ¿Puedo de alguna manera hacer que los instrumentos sean conscientes de Python?

Una solución en la que puedo pensar es cuando ve un marco PyEval_EvalFrameEx que busca en sus variables / parámetros locales para separar las diferentes llamadas de Python y mostrarme algo de información de llamadas.

No estoy preguntando acerca de sólo un perfilador de Python. Quiero perfilar mi código nativo. Pero en este perfil de código nativo, quiero agregar más inteligencia para analizar y traducir los marcos de pila de Python.


De acuerdo con esta respuesta de , Instruments es un GUI de front-end a dtrace . Hay documentación de Apple que confirma esto y algunos artículos específicos de OS-X sobre dtrace en Big Nerd Ranch, entre otros lugares.

Hay patches que se pueden aplicar a la fuente CPython antes de compilarlo para instrumentarlo para dtrace. Parece que hay o solía haber soporte para la creación automática de un nuevo python con dtrace en homebrew , pero ahora no encuentro referencias para una receta de homebrew con el soporte del proveedor de dtrace para las versiones actuales de python (2.7.10, 3.4 / 3.5). No lo he intentado, así que tal vez la receta actual solo funciona con un interruptor --with-dtrace al crear.

Hay una charla de PyTexas 2013: dtrace, Python and You que habla sobre cómo obtener una instalación de Python con soporte de dtrace incluido (que se demuestra específicamente con una Mac), y usar dtrace en la línea de comandos.

Pienso que una vez que tengas un Python con soporte para dtrace instalado, cuando lo ejecutes, deberías poder verlo y utilizarlo en Instruments. Si está agregando un intérprete de python a una aplicación OS X (ya sea como un .framework o alguna otra forma de vinculación), si ese python tuviera los parches dtrace aplicados antes de la compilación, también pensaría que estaría disponible para trabajar con en dtrace. No lo he intentado, pero dado lo que sé sobre dtrace, creo que debería funcionar. Si confirmo que esto es cierto, volveré a publicar.


Hay un gran nuevo generador de perfiles GUI llamado PyVmMonitor . Todavía no lo he conseguido para adjuntarlo a mi aplicación en ejecución, pero lo he estado usando para generar y analizar perfiles desde la línea de comandos de esta manera:

python /Applications/PyVmMonitor.app/Contents/MacOS/public_api/pyvmmonitor --profile=yappi my_app.py


No hay ningún instrumento MacOSX para perfilar el código Python. Personalmente, yo uso cProfile. Es un perfilador interno llamado cProfile . Puedes usarlo de cualquiera de las siguientes formas:

import cProfile cProfile.run(''print "Hello World!"'')

o

python -m cProfile your_own_script.py

El resultado sería algo como:

>>> 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}

Editar: Si buscas llamadas a nivel nativo. Luego debes moverte a strace (para Linux) y dtruss (para Mac OSX) o alguna otra herramienta como esa. Básicamente, puedes envolver tu script Python en una llamada de strace y podrás ver todas tus llamadas C / C ++ "nativas". Para otros sistemas linux use:

strace -fetrace=open python your_script.py

o si estás en Mac OSX:

dtruss -f -t open python your_script.py

¡Espero que esto ayude!