2010-07-31 7 views
82

Tôi sử dụng cProfile bây giờ nhưng tôi thấy nó tẻ nhạt để viết mã pstats chỉ để truy vấn dữ liệu thống kê.Có hồ sơ trực quan cho Python không?

Tôi đang tìm một công cụ trực quan cho tôi biết mã Python của tôi đang làm gì về thời gian CPU và cấp phát bộ nhớ.

Một số ví dụ từ thế giới Java là visualvmJProfiler.

  • Có điều gì như thế này không?
  • Có IDE nào thực hiện việc này không?
  • Có thể dtrace trợ giúp không?

Tôi biết về KCachegrind cho Linux, nhưng tôi thích thứ gì đó mà tôi có thể chạy trên Windows/Mac mà không cần cài đặt KDE.

+5

Nếu một chương trình như thế này chưa tồn tại, nó sẽ là một dự án mã nguồn mở tuyệt vời. – carl

+0

@cvondrick Một chương trình như thế này không tồn tại và đã được đề cập: KCachegrind. –

+1

@Devin, có nhưng hãy xem câu hỏi. :-) – carl

Trả lời

39

Tôi chỉ biết về RunSnakeRun.

Cũng có một số cuộc trò chuyện trước đây về một trình biên dịch tích hợp trong PyDev (Eclipse), nhưng tôi không biết liệu điều đó có bao giờ thấy ánh sáng ban ngày hay không.

Cập nhật: Thật không may có vẻ như RunSnakeRun không còn được duy trì, và nó không hỗ trợ Python 3.

+0

+1 cho RunSnakeRun. IMHO công cụ tốt nhất. – codeape

+2

RunSnakeRun là tốt, nhưng tiếc là nó hiện không hoạt động trong Python 3. (True cho tháng 6 năm 2014.) –

+0

@Ram: Cảm ơn thông tin, đó là điều không may :-( – nikow

4

Người này đã tạo ra một hồ sơ cá nhân đồ họa, mô tả here. Có lẽ bạn có thể sử dụng nó như là một điểm khởi đầu cho công việc của riêng bạn.

+1

Điều đó rất tuyệt, nhưng dường như chỉ dành cho C/C++. Nó sử dụng python mặc dù. – Rory

13

Tôi sử dụng gprof2dot.py. Kết quả là like this. Tôi sử dụng các lệnh đó:

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

Bạn cần graphvizgprof2dot.py cài đặt. Bạn có thể thích một số convenience shell script.

+0

Nếu bạn xuất svg thay vì png (với dấu chấm -Tsvg -o profile.svg), bạn sẽ có thể tìm kiếm biểu đồ đầu ra bằng trình duyệt của mình và bạn sẽ có thể chia tỷ lệ hình ảnh mà không có jaggies. – razeh

0

Tôi đã sử dụng plop và thấy nó rất nhẹ. Cung cấp thông tin chi tiết nhanh về mức độ hoàn hảo.

2

Python Call Graph tạo các bức ảnh rất giống với các bức ảnh trong maxy's answer. Nó cũng cho thấy tổng thời gian cho mỗi hàm, vì một số lý do nó không được phản ánh trong các đồ thị ví dụ.

65

Một người bạn và tôi đã viết trình xem hồ sơ Python được gọi là SnakeViz chạy trong trình duyệt web. Nếu bạn đã sử dụng thành công RunSnakeRun SnakeViz không thể thêm nhiều giá trị, nhưng SnakeViz dễ cài đặt hơn nhiều.

Chỉnh sửa: SnakeViz hỗ trợ Python 2 và 3 và hoạt động trên tất cả các hệ thống chính.

+1

Tôi gặp nhiều rắc rối khi cài đặt wx trên OS X, nhưng SnakeViz đã làm việc trong lần thử đầu tiên. Sản lượng hữu ích và hấp dẫn. Tôi chắc chắn muốn giới thiệu nó cho bất cứ ai khác gặp khó khăn khi nhận được wx làm việc trên máy Mac. http://stackoverflow.com/a/7693928/553403 cũng hữu ích trong việc hiển thị đầu ra hồ sơ của tôi. – smholloway

+0

Tôi đồng ý với @smholloway. Cảm ơn Chúa, tôi đã tìm thấy câu trả lời này. Tôi đã cố gắng để cài đặt các hình thức khác nhau của visualizer, nhưng không có may mắn, nhưng điều này làm việc trên thử đầu tiên –

8

Spyder cũng cung cấp một gui khá tốt đẹp cho cProfile:

enter image description here

+0

Làm thế nào để bạn tải một hồ sơ hiện có? –

0

Tôi đã viết một công cụ trực quan dựa trên trình duyệt, profile_eye, hoạt động trên đầu ra của gprof2dot.

gprof2dot rất hữu ích khi tìm kiếm nhiều đầu ra công cụ định dạng và thực hiện công việc tuyệt vời ở vị trí phần tử biểu đồ. Kết xuất cuối cùng là đồ họa tĩnh, thường rất lộn xộn.

Sử dụng d3.js có thể loại bỏ phần lớn sự lộn xộn đó, thông qua sự mờ dần tương đối của các phần tử không tập trung, chú giải công cụ và fisheye distortion.

Để so sánh, hãy xem profile_eye's visualization trong số canonical example used by gprof2dot. Đối với Python nói riêng, xem a cProfile output example.

3

KCacheGrind bao gồm một phiên bản được gọi là QCacheGrind mà chạy on Mac OS Xon Windows.

+0

Hơn nữa OP có vẻ hiểu sai các phụ thuộc cho KCachegrind trên Linux. Trên Debian/Ubuntu/Mint, tất cả những gì bạn cần là 'apt-get install kcachegrind' chỉ cài đặt 3 thư viện liên quan đến KDE. – saaj

+1

@saaj trên cài đặt Ubuntu 17.04, 'apt install kcachegrind' muốn cài đặt 102 gói, bao gồm ~ 40 thư viện KDE. –

+0

@mehaase Trên ubuntu mới: xenial' nó có thể gấp ba lần, nhưng nó là một môi trường phát triển và tôi hầu như không thấy nó như là một vấn đề. Và thực sự 'apt-cache phụ thuộc --recurse --no-recommends --no-suggest --no-conflicts --no-breaks --no-thay thế --no-enhances --no-pre-depends kcachegrind | grep kde | grep Phụ thuộc | sắp xếp -u | wc -l' nói chỉ 13. – saaj

1

Cân nhắc pyflame + flamegraph

Pyflame: Một Ptracing Profiler Đối với Python + flamegraph

https://github.com/uber/pyflame

Bạn có thể theo dõi đối với một quá trình chạy python sử dụng pyflame.