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.


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.


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.


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 .


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



4

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


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 .


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



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 .



0

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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.