Apakah ada profiler visual untuk Python? [Tutup]

99

Saya menggunakan cProfile sekarang tetapi saya merasa membosankan untuk menulis kode pstats hanya untuk menanyakan data statistik.

Saya mencari alat visual yang menunjukkan kepada saya apa yang dilakukan kode Python saya dalam hal waktu CPU dan alokasi memori.

Beberapa contoh dari dunia Java adalah visualvm dan JProfiler .

  • Apakah ada yang seperti ini?
  • Apakah ada IDE yang melakukan ini?
  • Akankah dtrace membantu?

Saya tahu tentang KCachegrind untuk Linux, tetapi saya lebih suka sesuatu yang dapat saya jalankan di Windows / Mac tanpa menginstal KDE.

Frederik
sumber
5
Jika program seperti ini belum ada, itu akan menjadi proyek open source yang bagus.
carl
@cvondrick Program seperti ini memang ada, dan telah disebutkan: KCachegrind.
Devin Jeanpierre
1
@ Devin, ya tapi lihat pertanyaannya. :-)
carl
Apakah Anda mengetahui teknik ini: stackoverflow.com/questions/375913/… Ini bukan visual, tetapi juga tidak membosankan, dan sulit dikalahkan untuk efektivitas.
Mike Dunlavey
4
Pecinta @KCacheGrind: Alasan apa pun untuk tidak harus menginstal KDE adalah alasan yang baik untuk tidak menggunakan KCacheGrind.
Matt Joiner

Jawaban:

86

Seorang teman dan saya telah menulis penampil profil Python bernama SnakeViz yang berjalan di browser web. Jika Anda sudah berhasil menggunakan RunSnakeRun SnakeViz mungkin tidak menambahkan nilai sebanyak itu, tetapi SnakeViz jauh lebih mudah untuk dipasang.

Sunting: SnakeViz mendukung Python 2 dan 3 dan bekerja pada semua sistem utama.

jiffyclub.dll
sumber
41

Saya hanya mengetahui RunSnakeRun .

Ada juga beberapa pembicaraan beberapa waktu lalu tentang profiler terintegrasi di PyDev (Eclipse), tetapi saya tidak tahu apakah itu akan pernah terjadi.

Pembaruan: Sayangnya tampaknya RunSnakeRun tidak lagi dipertahankan, dan tidak mendukung Python 3.

nikow
sumber
1 untuk RunSnakeRun. Alat terbaik IMHO.
codeape
4
RunSnakeRun bagus, tapi sayangnya saat ini tidak berfungsi di Python 3. (Benar untuk Juni 2014.)
Ram Rachum
@Ram: Terima kasih atas infonya, yang sangat disayangkan :-(.
nikow
1
Saya telah menggunakan pyinstrument sebagai gantinya. Ini hewan yang berbeda, tapi berguna.
Ram Rachum
Saya suka RunSnakeRun, tapi saya sangat tidak suka bagaimana ini menampilkan penelepon dan calon pelanggan. RunSnakeRun akan menampilkan nilai "total" untuk jumlah panggilan, waktu lokal dan waktu kumulatif untuk setiap pemanggil / calon. Jadi, Anda dapat memiliki hal-hal seperti fungsi yang memiliki waktu kumulatif 5 detik tetapi kalender yang memiliki waktu kumulatif 100 detik. Tidak begitu intuitif, dan tidak berguna seperti yang disediakan pstats. pstats menggunakan informasi kontekstual terkait dengan fungsi yang dimaksud untuk memberikan nomor yang lebih bermakna bagi statistik pemanggil / panggilan. Tidak mengetahui penampil lain yang membuat ini dapat dilihat dengan mudah.
Vultaire
14

Saya menggunakan gprof2dot.py. Hasilnya terlihat seperti ini . Saya menggunakan perintah itu:

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

Anda perlu memasang graphviz dan gprof2dot.py . Anda mungkin menyukai skrip shell praktis .

maxy
sumber
Jika Anda mengeluarkan svg dan bukan png (dengan titik -Tsvg -o profile.svg) Anda akan dapat mencari grafik keluaran dengan browser Anda, dan Anda akan dapat menskalakan gambar tanpa jaggies.
razeh
8

Spyder juga menyediakan antarmuka yang cukup bagus untuk cProfile:

masukkan deskripsi gambar di sini

jsexauer.dll
sumber
2
Bagaimana Anda memuat profil yang ada?
Clément
4

Orang ini membuat profil grafis, yang dijelaskan di sini . Mungkin Anda bisa menggunakannya sebagai titik awal untuk pekerjaan Anda sendiri.

PaulMcG
sumber
1
Itu sangat keren, tapi ternyata hanya untuk C / C ++. Ini menggunakan python sekalipun.
Rory
4

KCacheGrind menyertakan versi yang disebut QCacheGrind yang berjalan di Mac OS X dan Windows .

akaihola
sumber
Selain itu, OP tampaknya salah menafsirkan dependensi untuk KCachegrind di Linux. Di Debian / Ubuntu / Mint yang Anda butuhkan hanyalah apt-get install kcachegrindmenginstal 3 pustaka yang berhubungan dengan KDE.
saaj
2
@saaj pada instalasi Ubuntu 17.04, apt install kcachegrindingin menginstal 102 paket, termasuk ~ 40 perpustakaan KDE.
Mark E. Haase
@mehaase On fresh ubuntu:xenialmungkin tiga kali lebih banyak, tapi ini untuk lingkungan pengembangan dan saya hampir tidak melihatnya sebagai masalah. Dan sebenarnya 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 -lmengatakan hanya 13.
saaj
2

Grafik Panggilan Python menghasilkan gambar yang sangat mirip dengan yang ada di jawaban maxy . Ini juga menunjukkan waktu total untuk setiap fungsi, karena alasan tertentu itu tidak tercermin dalam grafik contoh.

Lev Levitsky
sumber
1

Saya telah menulis alat visualisasi berbasis browser, profile_eye , yang beroperasi pada keluaran gprof2dot .

gprof2dot sangat bagus dalam mengumpulkan banyak keluaran alat profil, dan melakukan pekerjaan yang baik pada penempatan elemen grafik. Rendering terakhir adalah grafik statis, yang seringkali sangat berantakan.

Menggunakan d3.js dimungkinkan untuk menghilangkan banyak kekacauan itu, melalui pemudaran relatif dari elemen yang tidak fokus, tooltips, dan distorsi fisheye .

Sebagai perbandingan, lihat visualisasi profile_eye dari contoh kanonis yang digunakan oleh gprof2dot . Untuk Python khususnya, lihat contoh keluaran cProfile .

Ami Tavory
sumber
1

Pertimbangkan pyflame + flamegraph

Pyflame: Profiler Ptracing Untuk Python + flamegraph

https://github.com/uber/pyflame

Anda dapat melacak proses python yang sedang berjalan menggunakan pyflame.

McKelvin
sumber
0

Saya telah menggunakan celepuk dan ternyata sangat ringan. Memberi wawasan singkat tentang kinerja.

auny
sumber
vprof adalah alat serupa yang juga menggunakan flamegraph, tetapi juga dapat melakukan profil memori. Sayangnya ini hanya menunjukkan waktu kumulatif dan bukan total waktu yang dihabiskan dalam suatu fungsi.
goodmami