2010-07-31 11 views
82

Ahora uso cProfile pero me resulta tedioso escribir código de pstats solo para consultar los datos estadísticos.¿Hay un perfilador visual para Python?

Estoy buscando una herramienta visual que me muestre lo que hace mi código Python en términos de tiempo de CPU y asignación de memoria.

Algunos ejemplos del mundo de Java son visualvm y JProfiler.

  • ¿Algo como esto existe?
  • ¿Hay un IDE que hace esto?
  • ¿Lo ayudaría dtrace?

Sé acerca de KCachegrind para Linux, pero preferiría algo que pueda ejecutar en Windows/Mac sin instalar KDE.

+5

Si un programa como este todavía no existe, sería un gran proyecto de código abierto. – carl

+0

@cvondrick Un programa como este existe, y ya fue mencionado: KCachegrind. –

+1

@Devin, sí, pero vea la pregunta. :-) – carl

Respuesta

39

Solo conozco RunSnakeRun.

También se habló hace algún tiempo sobre un generador de perfiles integrado en PyDev (Eclipse), pero no sé si eso alguna vez verá la luz.

Actualización: Por desgracia, parece que RunSnakeRun ya no se mantiene, y no es compatible con Python 3.

+0

+1 para RunSnakeRun. La mejor herramienta en mi humilde opinión. – codeape

+2

RunSnakeRun es bueno, pero desafortunadamente no funciona actualmente en Python 3. (Verdadero para junio de 2014.) –

+0

@Ram: Gracias por la información, eso es desafortunado :-(. – nikow

4

Esta persona creó un perfil gráfico, describe here. Tal vez podrías usar eso como punto de partida para tu propio trabajo.

+1

Eso es genial, pero aparentemente solo para C/C++. Sin embargo, usa Python. – Rory

13

Yo uso gprof2dot.py. El resultado parece like this. Yo uso los comandos:

python -m cProfile -o profile.dat my_program.py 
    gprof2dot.py -f pstats profile.dat | dot -Tpng -o profile.png 

Usted necesito graphviz y gprof2dot.py instalado. Es posible que desee un convenience shell script.

+0

Si arroja svg en lugar de png (con dot -Tsvg -o profile.svg) podrá buscar en el gráfico de salida con su navegador, y podrá escalar la imagen sin jaggies. – razeh

0

He usado plop y he encontrado que es muy liviano. Da una visión rápida de la perforación.

2

Python Call Graph genera imágenes muy similares a las de maxy's answer. También muestra el tiempo total para cada función, por alguna razón no se refleja en los gráficos de ejemplo.

65

Un amigo y yo hemos escrito un visor de perfil de Python llamado SnakeViz que se ejecuta en un navegador web. Si ya está utilizando con éxito RunSnakeRun SnakeViz puede no agregar mucho valor, pero SnakeViz es mucho más fácil de instalar.

Editar: SnakeViz es compatible con Python 2 y 3 y funciona en todos los sistemas principales.

+1

Tuve muchos problemas para instalar wx en OS X, pero SnakeViz funcionó en el primer intento. Salida útil y atractiva. Definitivamente lo recomendaría a cualquier persona que tenga problemas para lograr que wx trabaje en Mac. http://stackoverflow.com/a/7693928/553403 también me ayudó a visualizar el resultado de mi perfil. – smholloway

+0

Estoy de acuerdo con @smholloway. Gracias a Dios encontré esta respuesta. Intenté instalar varias formas de visualizador, pero sin suerte, pero esta funcionó en el primer intento –

8

Spyder también proporciona una bonita interfaz gráfica de usuario para cprofile:

enter image description here

+0

¿Cómo se carga un perfil existente? –

0

que he escrito una herramienta de visualización basada en navegador, profile_eye, que opera en la salida gprof2dot.

gprof2dot es ideal para generar muchas salidas de herramientas de perfilado, y hace un gran trabajo en la colocación de elementos gráficos. La representación final es un gráfico estático, que a menudo es muy abarrotado.

Usando d3.js es posible eliminar gran parte de ese desorden, a través del desvanecimiento relativo de elementos desenfocados, información sobre herramientas, y un fisheye distortion.

Para la comparación, vea profile_eye's visualization del canonical example used by gprof2dot. Para Python en particular, vea a cProfile output example.

3

kcachegrind incluye una versión llamada QCacheGrind el que se ejecuta on Mac OS X y on Windows.

+0

Además, OP parece malinterpretar las dependencias de KCachegrind en Linux. En Debian/Ubuntu/Mint todo lo que necesita es 'apt-get install kcachegrind' que instala solo 3 bibliotecas relacionadas con KDE. – saaj

+1

@saaj en la instalación de Ubuntu 17.04, 'apt install kcachegrind' desea instalar 102 paquetes, incluidas ~ 40 bibliotecas de KDE. –

+0

@mehaase En 'ubuntu: xenial' reciente puede ser tres veces más, pero es para un entorno de desarrollo y apenas lo veo como un problema. Y en realidad 'apt-cache depende de --recurse --no-recomienda --no-sugiere --no-conflictos --no-breaks --no-reemplaza --no-enhanceces --no-pre-depends kcachegrind | grep kde | grep Depende | ordenar -u | wc -l' dice solo 13. – saaj

Cuestiones relacionadas