Há um perfil visual para o Python? [fechado]
Eu uso o cProfile agora, mas acho entediante escrever o código pstats só para consultar os dados estatísticos.
Estou à procura de uma ferramenta visual que me mostre o que o meu código Python está a fazer em termos de tempo de CPU e alocação de memória.Alguns exemplos do mundo Java são visualvm e JProfiler.
-
Isto existe?
Há alguma IDE que faça isto?
- dtrace ajudar?
Eu sei sobre o KCachegrind para o Linux, mas preferia algo que pudesse correr no Windows/Mac sem instalar o KDE.
12 answers
Um amigo e eu escrevemos um visualizador de perfis Python chamado SnakeViz que corre num navegador web. Se já estiver a usar com sucesso o Russnakerun O SnakeViz pode não adicionar tanto valor, mas o SnakeViz é muito mais fácil de instalar.
Editar: o SnakeViz suporta os Python 2 e 3 e funciona em todos os sistemas principais.
Só estou ciente deRunSnakeRun .
Também houve algumas conversas há algum tempo sobre um profiler Integrado em PyDev (Eclipse), mas não sei se isso alguma vez verá a luz do dia.Actualização: Infelizmente parece que o RunSnakeRun já não é mantido e não suporta o Python 3.
Eu uso gprof2dot.py. o resultado parece Assim . Eu uso esses comandos:
python -m cProfile -o profile.dat my_program.py
gprof2dot.py -f pstats profile.dat | dot -Tpng -o profile.png
Precisas de graphviz e gprof2dot.py instalado. Você pode gostar de um script de concha de conveniência .
Esta pessoa criou um perfil gráfico, descrito aqui . Talvez possas usar isso como ponto de partida para o teu próprio trabalho.
As ferramentas Python para o Visual Studio contêm um perfil gráfico muito bem feito: http://www.youtube.com/watch?v=VCx7rlPyEzE&hd=1
O KCacheGrind inclui uma versão chamada QCacheGrind que executa no Mac OS X e no Windows .
O grafo de chamadas Python gera imagens muito semelhantes às da resposta de maxy . Ele também mostra tempo total para cada função, por alguma razão não é refletido nos grafos exemplo.
Escrevi uma ferramenta de visualização baseada no navegador, profile_eye , que opera na saída de gprof2dot .
O Gprof2dot é óptimo em grokking muitas saídas de ferramentas de análise, e faz um grande trabalho na colocação de elementos de gráfico. A renderização final é um gráfico estático, que muitas vezes é muito confuso.
Usando d3.js é possível remover grande parte dessa confusão, através do desbotamento relativo de elementos desfocados, pontas de ferramentas, e um olho de peixe distorção
Para comparação, Ver a visualização de profile_eye do exemplo canónico usado pelo gprof2dot . Para Python em particular, veja um exemplo de saída de cProfile .
Considere Flame + flamegraph
Pyflame: um Profiler de localização para Python + flamegraph
Https://github.com/uber/pyflame
Você pode seguir em direcção a um processo em execução em python usando o pyflame.