Existe um criador de perfil visual para Python? [fechadas]

99

Eu uso cProfile agora, mas acho tedioso escrever código pstats apenas para consultar os dados estatísticos.

Estou procurando uma ferramenta visual que me mostre o que meu código Python está fazendo em termos de tempo de CPU e alocação de memória.

Alguns exemplos do mundo Java são visualvm e JProfiler .

  • Será que algo assim existe?
  • Existe um IDE que faz isso?
  • O dtrace ajudaria?

Eu sei sobre o KCachegrind para Linux, mas prefiro algo que possa executar no Windows / Mac sem instalar o KDE.

Frederik
fonte
5
Se um programa como este ainda não existe, seria um ótimo projeto de código aberto.
Carl
@cvondrick Um programa como este existe e já foi mencionado: KCachegrind.
Devin Jeanpierre
1
@Devin, sim, mas veja a pergunta. :-)
carl
Você está ciente dessa técnica: stackoverflow.com/questions/375913/… Não é visual, mas também não é tedioso e é difícil de superar em termos de eficácia.
Mike Dunlavey
4
Amantes do @KCacheGrind: Qualquer razão para não ter que instalar o KDE é uma boa razão para não usar o KCacheGrind.
Matt Joiner

Respostas:

86

Um amigo e eu escrevemos um visualizador de perfil Python chamado SnakeViz que é executado em um navegador da web. Se você já estiver usando o RunSnakeRun, o SnakeViz pode não agregar muito valor, mas o SnakeViz é muito mais fácil de instalar.

Edit: SnakeViz suporta Python 2 e 3 e funciona em todos os principais sistemas.

jiffyclub
fonte
41

Estou ciente apenas de RunSnakeRun .

Também se falou há algum tempo sobre um profiler integrado em PyDev (Eclipse), mas não sei se isso verá a luz do dia.

Atualização: Infelizmente, parece que o RunSnakeRun não é mais mantido e não oferece suporte ao Python 3.

Nikow
fonte
1 para RunSnakeRun. A melhor ferramenta IMHO.
codeape
4
RunSnakeRun é bom, mas infelizmente não funciona no Python 3. (Verdadeiro para junho de 2014.)
Ram Rachum
@Ram: Obrigado pela informação, isso é lamentável :-(.
nikow
1
Em vez disso, usei o instrumento py. É um animal diferente, mas é útil.
Ram Rachum de
Gosto de RunSnakeRun, mas não gosto muito de como ele exibe chamadores e chamadas. RunSnakeRun mostrará os valores "totais" para contagens de chamadas, hora local e hora cumulativa para cada chamador / receptor. Então, você pode ter coisas como uma função que tem tempo cumulativo de 5 segundos, mas um receptor que tem tempo cumulativo de 100 segundos. Não é tão intuitivo e não é tão útil quanto o que o pstats oferece. pstats usa informações contextuais relacionadas à função em questão para fornecer números mais significativos para as estatísticas do chamador / receptor. Desconhecer outro visualizador, o que torna isso facilmente visível.
Vultaire de
14

Eu uso gprof2dot.py. O resultado é 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

Você precisa graphviz e gprof2dot.py instalado. Você pode gostar de um script de shell de conveniência .

maxy
fonte
Se você imprimir svg ao invés de png (com ponto -Tsvg -o profile.svg), você poderá pesquisar o gráfico de saída com seu navegador e poderá dimensionar a imagem sem serrilhados.
razeh
8

O Spyder também fornece uma interface gráfica muito boa para cProfile:

insira a descrição da imagem aqui

jsexauer
fonte
2
Como você carrega um perfil existente?
Clément
4

Essa pessoa criou um perfil gráfico, descrito aqui . Talvez você possa usar isso como um ponto de partida para seu próprio trabalho.

PaulMcG
fonte
1
Isso é muito legal, mas aparentemente apenas para C / C ++. No entanto, ele usa python.
Rory
4

KCacheGrind inclui uma versão chamada QCacheGrind que pode ser executada no Mac OS X e no Windows .

Akaihola
fonte
Além disso, o OP parece interpretar mal as dependências do KCachegrind no Linux. No Debian / Ubuntu / Mint, tudo que você precisa é apt-get install kcachegrindinstalar apenas 3 bibliotecas relacionadas ao KDE.
saaj
2
@saaj na instalação do Ubuntu 17.04, apt install kcachegrinddeseja instalar 102 pacotes, incluindo ~ 40 bibliotecas KDE.
Mark E. Haase de
@mehaase No fresco ubuntu:xenialpode ser três vezes mais, mas é para um ambiente de desenvolvimento e quase não vejo isso como um problema. E na verdade 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 -ldiz apenas 13.
saaj
1

Eu escrevi uma ferramenta de visualização baseada em navegador, profile_eye , que opera na saída de gprof2dot .

O gprof2dot é ótimo em agrupar muitas saídas de ferramentas de perfil e faz um ótimo trabalho na colocação de elementos gráficos. A renderização final é um gráfico estático, que geralmente é muito confuso.

Usando d3.js , é possível remover muito dessa desordem, por meio do desbotamento relativo de elementos desfocados, dicas de ferramentas e uma distorção fisheye .

Para comparação, consulte a visualização de profile_eye do exemplo canônico usado por gprof2dot . Para Python em particular, veja um exemplo de saída cProfile .

Ami Tavory
fonte
1

Considere pyflame + flamegraph

Pyflame: um Profiler Ptracing para Python + flamegraph

https://github.com/uber/pyflame

Você pode rastrear um processo python em execução usando pyflame.

McKelvin
fonte
0

Eu usei o plop e o achei muito leve. Dá uma visão rápida do desempenho.

auny
fonte
vprof é uma ferramenta semelhante que também usa o flamegraph, mas também pode fazer perfis de memória. Infelizmente, ele mostra apenas o tempo cumulativo e não o tempo total gasto em uma função.
goodmami