Tôi đã từng sử dụng một hồ sơ tốt của Apple được tích hợp vào ứng dụng Màn hình Hệ thống. Miễn là mã C++ của bạn được biên dịch với thông tin gỡ rối, bạn có thể lấy mẫu ứng dụng đang chạy và nó sẽ in ra một cây thụt lề cho bạn biết phần trăm thời gian của hàm cha đã được sử dụng trong hàm này (và so với các hàm khác) .Làm thế nào bạn có thể nhận được cây gọi với trình biên dịch python?
Ví dụ, nếu chính gọi function_1
và function_2
, function_2
cuộc gọi function_3
, và sau đó các cuộc gọi chính function_3
:
main (100%, 1% in function body):
function_1 (9%, 9% in function body):
function_2 (90%, 85% in function body):
function_3 (100%, 100% in function body)
function_3 (1%, 1% in function body)
tôi sẽ thấy điều này và nghĩ rằng, "Một cái gì đó đang tiến hành một thời gian dài trong các mã trong cơ thể của function_2
. Nếu tôi muốn chương trình của tôi nhanh hơn, đó là nơi tôi nên bắt đầu. "
Có ai biết cách tôi có thể dễ dàng có được kết quả đầu ra chính xác nhất cho chương trình python không?
Tôi đã nhìn thấy mọi người nói để làm điều này:
import cProfile, pstats
prof = cProfile.Profile()
prof = prof.runctx("real_main(argv)", globals(), locals())
stats = pstats.Stats(prof)
stats.sort_stats("time") # Or cumulative
stats.print_stats(80) # 80 = how many to print
nhưng nó khá lộn xộn so với cây gọi tao nhã. Xin vui lòng cho tôi biết nếu bạn có thể dễ dàng làm điều này, nó sẽ giúp khá nhiều.
Chúc mừng!
Bạn có biết nếu gói này có thể làm thời gian cũng như số lượng cuộc gọi chức năng trôi qua? Ví dụ, tôi sẽ không nhớ gọi __hash __() hàng ngàn lần, nhưng gọi sắp xếp() nhiều lần trong danh sách lớn có thể khá chậm. – user
Bạn chỉ nên thử cả hai. Về cơ bản, chúng thực hiện tương tự theo các cách khác nhau với các kết quả đầu ra khác nhau. – Falmarri
+1, gói này nằm dọc theo những gì tôi nghĩ đến và đã nhanh chóng và dễ dàng cài đặt và gọi. Bạn có phiền nói với tôi làm thế nào bạn có được con số trên? Tôi đã làm một đồ thị (sử dụng pycallgraph.start_trace() và pycallgraph.make_dot_graph ('test.jpg', format = 'jpg', tool = 'neato') ), nhưng nó quá đông đúc và rất nhiều chức năng bị che khuất. – user