Có trình biên dịch trực quan cho Python không? [đóng cửa]


99

Bây giờ tôi sử dụng cProfile nhưng tôi thấy thật tẻ nhạt khi viết mã pstats chỉ để truy vấn dữ liệu thống kê.

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à phân bổ bộ nhớ.

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

  • Có một cái gì đó như thế này tồn tại?
  • Có IDE nào thực hiện điều này không?
  • Dtrace sẽ giúp đỡ?

Tôi biết về KCachegrind dành cho Linux, nhưng tôi muốn thứ gì đó 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,

@cvondrick Có một chương trình như thế này và đã được đề cập: KCachegrind.
Devin Jeanpierre,

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

Bạn có biết kỹ thuật này không: stackoverflow.com/questions/375913/… Nó không trực quan, nhưng cũng không tẻ nhạt và rất khó để đánh bại để đạt được hiệu quả.
Mike Dunlavey

4
Những người yêu thích @KCacheGrind: Bất kỳ lý do nào để không phải cài đặt KDE là một lý do chính đáng để không sử dụng KCacheGrind.
Matt Joiner

Câu trả lời:


86

Một người bạn và tôi đã viết một trình xem hồ sơ Python có tên là SnakeViz chạy trên trình duyệt web. Nếu bạn đã sử dụng RunSnakeRun thành công, SnakeViz có thể không thêm nhiều giá trị như vậy, 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.


41

Tôi chỉ biết đến RunSnakeRun .

Cách đây cũng có một số cuộc nói chuyện 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ờ nhìn 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.


+1 cho RunSnakeRun. Công cụ tốt nhất IMHO.
codeape 19/12/12

4
RunSnakeRun là tốt, nhưng tiếc là nó không hiện đang làm việc trong Python 3. (True cho tháng Sáu năm 2014.)
Ram Rachum

@Ram:. Cảm ơn bạn đã thông tin, đó là đáng tiếc :-(
nikow

1
Tôi đã sử dụng pyinstrument thay thế. Nó là một con vật khác, nhưng nó hữu ích.
Ram Rachum

Tôi thích RunSnakeRun, nhưng tôi thực sự không thích cách nó hiển thị người gọi và người gọi. RunSnakeRun sẽ hiển thị các giá trị "tổng" cho số lượng cuộc gọi, giờ địa phương và thời gian tích lũy cho mỗi người gọi / người gọi. Vì vậy, bạn có thể có những thứ như một hàm có thời gian tích lũy là 5 giây nhưng một hàm có thời gian tích lũy là 100 giây. Không trực quan và không hữu ích như những gì pstats cung cấp. pstats sử dụng thông tin ngữ cảnh liên quan đến hàm được đề cập để cung cấp các số có ý nghĩa hơn cho thống kê người gọi / callee. Không biết người xem khác, điều này có thể dễ dàng xem được.
Vultaire

14

Tôi sử dụng gprof2dot.py. Kết quả trông như thế này . 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 cài đặt graphvizgprof2dot.py . Bạn có thể thích một tập lệnh shell tiện lợi .


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ó răng cưa.
razeh



4

Người này đã tạo một hồ sơ đồ họa, được mô tả ở đây . Có lẽ bạn có thể sử dụng nó như 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

4

KCacheGrind bao gồm một phiên bản có tên QCacheGrind chạy trên Mac OS XWindows .


Hơn nữa OP dường như hiểu sai về 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 kcachegrindchỉ cài đặt 3 thư viện liên quan đến KDE.
saaj

2
@saaj trên cài đặt Ubuntu 17.04, apt install kcachegrindmuốn cài đặt 102 gói, bao gồm ~ 40 thư viện KDE.
Mark E. Haase 20:17

@mehaase On fresh ubuntu:xenialcó thể nhiều gấp ba lần, nhưng nó dành cho môi trường phát triển và tôi hầu như không thấy đó là một vấn đề. Và thực sự 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 -lchỉ nói là 13.
saaj



1

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

gprof2dot rất giỏi trong việc tạo ra nhiều kết quả đầu ra của công cụ định hình và thực hiện một công việc tuyệt vời ở vị trí phần tử đồ thị. Kết xuất cuối cùng là một đồ họa tĩnh, thường rất lộn xộn.

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

Để so sánh, hãy xem hình ảnh trực quan của profile_eye về ví dụ chuẩn được sử dụng bởi gprof2dot . Đối với Python cụ thể, hãy xem ví dụ đầu ra cProfile .



0

Tôi đã sử dụng plop và thấy nó rất nhẹ. Cung cấp thông tin chi tiết nhanh chóng về hiệu suất.


vprof là một công cụ tương tự cũng sử dụng máy ghi âm, nhưng nó cũng có thể làm hồ sơ bộ nhớ. Thật không may, nó chỉ hiển thị thời gian tích lũy chứ không phải tổng thời gian dành cho một hàm.
goodmami 13/09/18
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.