¿Existe un generador de perfiles visual para Python? [cerrado]


99

Ahora uso cProfile, pero me resulta tedioso escribir código pstats solo para consultar los datos estadísticos.

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 Java son visualvm y JProfiler .

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


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

@cvondrick Existe un programa como este, y ya se mencionó: KCachegrind.
Devin Jeanpierre

1
@Devin, sí, pero mira la pregunta. :-)
carl

¿Conoce esta técnica? Stackoverflow.com/questions/375913/… No es visual, pero tampoco es tediosa, y es difícil de superar por su efectividad.
Mike Dunlavey

4
Amantes de @KCacheGrind: Cualquier razón para no tener que instalar KDE es una buena razón para no usar KCacheGrind.
Matt Joiner

Respuestas:


86

Un amigo y yo hemos escrito un visor de perfiles de Python llamado SnakeViz que se ejecuta en un navegador web. Si ya está utilizando RunSnakeRun, es posible que SnakeViz no agregue tanto 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.


41

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 del día.

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


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

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

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

1
En su lugar, he usado pyinstrument. Es un animal diferente, pero es útil.
Ram Rachum

Me gusta RunSnakeRun, pero no me gusta mucho cómo muestra a las personas que llaman y las llamadas. RunSnakeRun mostrará los valores "totales" para el recuento de llamadas, la hora local y el tiempo acumulado para cada persona que llama. Por lo tanto, puede tener cosas como una función que tiene un tiempo acumulativo de 5 segundos, pero una llamada que tiene un tiempo acumulativo de 100 segundos. No es tan intuitivo ni tan útil como lo que proporciona pstats. pstats utiliza información contextual relacionada con la función en cuestión para proporcionar números más significativos para las estadísticas de la persona que llama / destinataria. No tengo conocimiento de otro espectador que lo haga fácilmente visible.
Vultaire

14

Yo uso gprof2dot.py. El resultado se ve así . Yo uso esos comandos:

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

Necesita graphviz y gprof2dot.py instalados. Puede que le guste un script de shell de conveniencia .


Si genera svg en lugar de png (con punto -Tsvg -o profile.svg) podrá buscar el gráfico de salida con su navegador y podrá escalar la imagen sin irregularidades.
razeh

8

Spyder también proporciona una interfaz gráfica de usuario bastante agradable para cProfile:

ingrese la descripción de la imagen aquí


2
¿Cómo se carga un perfil existente?
Clément


4

Esta persona creó un perfil gráfico, que se describe aquí . Tal vez puedas usar eso como punto de partida para tu propio trabajo.


1
Eso es muy bueno, pero aparentemente solo para C / C ++. Sin embargo, usa Python.
Rory

4

KCacheGrind incluye una versión llamada QCacheGrind que se ejecuta en Mac OS X y en Windows .


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

2
@saaj en la instalación de Ubuntu 17.04, apt install kcachegrindquiere instalar 102 paquetes, incluidas ~ 40 bibliotecas de KDE.
Mark E. Haase

@mehaase En fresco ubuntu:xenial, 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 depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --no-pre-depends kcachegrind | grep kde | grep Depends | sort -u | wc -ldice solo 13.
saaj



1

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

gprof2dot es excelente para asimilar muchas salidas de herramientas de creación de perfiles y hace un gran trabajo en la ubicación de elementos gráficos. La representación final es un gráfico estático, que a menudo está muy desordenado.

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 una distorsión de ojo de pez .

Para comparar, vea la visualización de profile_eye del ejemplo canónico usado por gprof2dot . Para Python en particular, vea un ejemplo de salida de cProfile .



0

He usado plop y lo encontré muy ligero. Da una idea rápida del perf.


vprof es una herramienta similar que también usa el flamegraph, pero también puede crear perfiles de memoria. Desafortunadamente, solo muestra el tiempo acumulado y no el tiempo total dedicado a una función.
goodmami
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.