มี Visual profiler สำหรับ Python หรือไม่? [ปิด]


99

ตอนนี้ฉันใช้cProfileแต่ฉันคิดว่ามันน่าเบื่อที่จะเขียนโค้ด pstats เพื่อค้นหาข้อมูลสถิติ

ฉันกำลังมองหาเครื่องมือภาพที่แสดงให้ฉันเห็นว่ารหัส Python ของฉันกำลังทำอะไรในแง่ของเวลา CPU และการจัดสรรหน่วยความจำ

ตัวอย่างบางส่วนจากโลก Java เป็นVisualVMและJProfiler

  • สิ่งนี้มีอยู่จริงหรือไม่?
  • มี IDE ที่ทำสิ่งนี้หรือไม่?
  • dtraceจะช่วยได้ไหม

ฉันรู้เกี่ยวกับKCachegrindสำหรับ Linux แต่ฉันต้องการบางอย่างที่สามารถรันบน Windows / Mac ได้โดยไม่ต้องติดตั้ง KDE


5
หากยังไม่มีโปรแกรมเช่นนี้ก็คงจะเป็นโครงการโอเพ่นซอร์สที่ยอดเยี่ยม
carl

@cvondrick มีโปรแกรมแบบนี้อยู่และถูกกล่าวถึงแล้ว: KCachegrind
Devin Jeanpierre

1
@ เดวินใช่ แต่เห็นคำถาม :-)
carl

คุณทราบหรือไม่ว่าเทคนิคนี้stackoverflow.com/questions/375913/…ไม่ใช่ภาพ แต่ก็ไม่น่าเบื่อและยากที่จะเอาชนะเพื่อให้ได้ประสิทธิผล
Mike Dunlavey

4
คนรัก @KCacheGrind: เหตุผลที่ไม่ต้องติดตั้ง KDE เป็นเหตุผลที่ดีที่จะไม่ใช้ KCacheGrind
Matt Joiner

คำตอบ:


86

เพื่อนและฉันได้เขียนโปรแกรมดูโปรไฟล์ Python ชื่อSnakeVizซึ่งทำงานในเว็บเบราว์เซอร์ หากคุณใช้RunSnakeRun SnakeViz สำเร็จแล้วอาจไม่ได้เพิ่มมูลค่ามากขนาดนั้น แต่ SnakeViz นั้นติดตั้งง่ายกว่ามาก

แก้ไข: SnakeViz รองรับ Python 2 และ 3 และใช้งานได้กับระบบหลักทั้งหมด


41

ฉันก็แค่ตระหนักถึงRunSnakeRun

นอกจากนี้ยังมีการพูดคุยเกี่ยวกับตัวสร้างโปรไฟล์แบบรวมใน PyDev (Eclipse) แต่ฉันไม่รู้ว่าจะได้เห็นแสงสว่างของวันหรือไม่

อัปเดต: น่าเสียดายที่ดูเหมือนว่า RunSnakeRun จะไม่ได้รับการดูแลอีกต่อไปและไม่รองรับ Python 3


+1 สำหรับ RunSnakeRun IMHO เครื่องมือที่ดีที่สุด
codeape

4
RunSnakeRun เป็นสิ่งที่ดี แต่น่าเสียดายที่ตอนนี้ไม่สามารถใช้งานได้ใน Python 3 (จริงสำหรับมิถุนายน 2014)
Ram Rachum

@Ram: ขอบคุณสำหรับข้อมูลที่โชคร้าย :-(.
nikow

1
ฉันใช้ pyinstrument แทน มันเป็นสัตว์ที่แตกต่างกัน แต่ก็มีประโยชน์
รามราช

ฉันชอบ RunSnakeRun แต่ฉันไม่ชอบวิธีแสดงผู้โทรและผู้โทร RunSnakeRun จะแสดงค่า "ทั้งหมด" สำหรับจำนวนการโทรเวลาท้องถิ่นและเวลาสะสมสำหรับผู้โทร / ผู้โทรแต่ละคน ดังนั้นคุณสามารถมีสิ่งต่างๆเช่นฟังก์ชันที่มีเวลาสะสม 5 วินาที แต่ callee ซึ่งมีเวลาสะสม 100 วินาที ไม่ใช้งานง่ายและไม่มีประโยชน์เท่าที่ pstats ให้มา pstats ใช้ข้อมูลบริบทที่เกี่ยวข้องกับฟังก์ชันที่เป็นปัญหาเพื่อให้ตัวเลขที่มีความหมายมากขึ้นสำหรับสถิติผู้โทร / ผู้โทร ไม่ตระหนักถึงผู้ชมอื่นซึ่งทำให้สามารถดูได้อย่างง่ายดาย
Vultaire

14

ฉันใช้ gprof2dot.py ผลมีลักษณะเช่นนี้ ฉันใช้คำสั่งเหล่านั้น:

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

คุณต้องติดตั้งgraphvizและgprof2dot.py คุณอาจชอบเชลล์สคริปต์ที่สะดวก


หากคุณแสดงผล svg แทน png (ด้วย dot -Tsvg -o profile.svg) คุณจะสามารถค้นหากราฟผลลัพธ์ด้วยเบราว์เซอร์ของคุณและคุณจะสามารถปรับขนาดภาพได้โดยไม่มีรอยหยัก
razeh


5

Python Tools สำหรับ Visual Studio มีโปรไฟล์กราฟิกที่ทำได้ดีมาก: http://www.youtube.com/watch?v=VCx7rlPyEzE&hd=1

http://pytools.codeplex.com/


1
ใช่ฉันใช้ผู้สร้างโปรไฟล์นี้สำหรับสิ่งของ. Net ของฉัน แค่เน้นว่า cprofile ฉิบหายแค่ไหน ...
พื้นฐาน

4

คนนี้สร้างโปรไฟล์แบบกราฟิกที่อธิบายไว้ที่นี่ บางทีคุณอาจใช้สิ่งนั้นเป็นจุดเริ่มต้นในการทำงานของคุณเอง


1
มันเจ๋งมาก แต่เห็นได้ชัดสำหรับ C / C ++ เท่านั้น มันใช้ python แม้ว่า
รอรี

4

KCacheGrind รวมถึงรุ่นที่เรียกว่า QCacheGrind ซึ่งไม่ทำงานบน Mac OS Xและบน Windows


ยิ่งไปกว่านั้นดูเหมือนว่า OP จะตีความการอ้างอิงสำหรับ KCachegrind บน Linux ผิดพลาด บน Debian / Ubuntu / Mint สิ่งที่คุณต้องการคือapt-get install kcachegrindติดตั้งไลบรารีที่เกี่ยวข้องกับ KDE เพียง 3 ไลบรารี
saaj

2
@saaj ในการติดตั้ง Ubuntu 17.04 apt install kcachegrindต้องการติดตั้ง 102 แพ็คเกจรวมถึง ~ 40 KDE libraries
Mark E Haase

@mehaase เมื่อสดubuntu:xenialมันอาจมากกว่าสามเท่า แต่สำหรับสภาพแวดล้อมการพัฒนาและฉันแทบไม่เห็นว่าเป็นปัญหา และ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 -lพูดจริงแค่ 13
saaj


2

งูหลามโทรกราฟสร้างภาพคล้ายกับผู้ที่อยู่ในคำตอบของ maxy นอกจากนี้ยังแสดงเวลารวมสำหรับแต่ละฟังก์ชันด้วยเหตุผลบางประการจึงไม่แสดงในกราฟตัวอย่าง


1

ผมเคยเขียนเบราว์เซอร์ที่ใช้เครื่องมือสร้างภาพ, profile_eyeซึ่งดำเนินธุรกิจเกี่ยวกับการส่งออกของgprof2dot

gprof2dot นั้นยอดเยี่ยมในการรวบรวมเอาท์พุทเครื่องมือทำโปรไฟล์จำนวนมากและทำงานได้ดีในตำแหน่งองค์ประกอบกราฟ การเรนเดอร์ขั้นสุดท้ายเป็นกราฟิกแบบคงที่ซึ่งมักจะรกมาก

ใช้d3.jsมันเป็นไปได้ที่จะเอามากของความยุ่งเหยิงที่ผ่านการซีดจางของญาติขององค์ประกอบเลื่อนลอยคำแนะนำเครื่องมือและการบิดเบือนฟิชอาย

สำหรับการเปรียบเทียบให้ดูที่การสร้างภาพ profile_eye ของของตัวอย่างที่ยอมรับใช้โดย gprof2dot สำหรับงูใหญ่โดยเฉพาะอย่างยิ่งดูตัวอย่างการส่งออก cProfile



0

ฉันใช้ป๋อมแป๋มและพบว่าน้ำหนักเบามาก ให้ข้อมูลเชิงลึกอย่างรวดเร็วเกี่ยวกับความสมบูรณ์แบบ


vprofเป็นเครื่องมือที่คล้ายกันที่ใช้ Flamegraph แต่สามารถทำโปรไฟล์หน่วยความจำได้ด้วย น่าเสียดายที่แสดงเฉพาะเวลาสะสมไม่ใช่เวลาทั้งหมดที่ใช้ในฟังก์ชัน
goodmami
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.