Tôi đã sử dụng cProfile để cấu hình mã của tôi và nó hoạt động rất tốt. Tôi cũng sử dụng gprof2dot.py để trực quan hóa kết quả (làm cho nó rõ ràng hơn một chút).Làm cách nào để tôi có thể lập cấu hình mã vạch python theo từng dòng?
Tuy nhiên, cProfile (và hầu hết các trình biên dịch python khác mà tôi đã thấy cho đến nay) dường như chỉ có cấu hình ở cấp hàm gọi. Điều này gây ra sự nhầm lẫn khi một số chức năng được gọi từ những nơi khác nhau - Tôi không biết liệu cuộc gọi số 1 hoặc cuộc gọi số 2 có chiếm phần lớn thời gian hay không. Điều này càng trở nên tồi tệ hơn khi hàm trong câu hỏi là 6 cấp độ sâu, được gọi từ 7 địa điểm khác.
Vì vậy, câu hỏi của tôi là: làm thế nào để tôi có được một hồ sơ theo dòng? Thay vì điều này:
function #12, total time: 2.0s
Tôi muốn nhìn thấy một cái gì đó như thế này:
function #12 (called from somefile.py:102) 0.5s
function #12 (called from main.py:12) 1.5s
cProfile không hiển thị bao nhiêu trong tổng thời gian "chuyển" cho phụ huynh, nhưng một lần nữa kết nối này bị mất khi bạn có một loạt các lớp và các cuộc gọi được kết nối.
Lý tưởng nhất, tôi muốn có GUI có thể phân tích cú pháp thông qua dữ liệu, sau đó hiển thị cho tôi tệp nguồn của tôi với tổng thời gian cho mỗi dòng. Một cái gì đó như thế này:
main.py:
a = 1 # 0.0s
result = func(a) # 0.4s
c = 1000 # 0.0s
result = func(c) # 5.0s
Sau đó, tôi muốn có thể click vào thứ hai "func (c)" gọi điện để xem những gì đang chiếm thời gian trong cuộc gọi đó, tách biệt với "func (a)" gọi.
Điều đó có hợp lý không? Có thư viện hồ sơ nào thu thập loại thông tin này không? Có một số công cụ tuyệt vời mà tôi đã bỏ lỡ? Mọi phản hồi đều được đánh giá cao. Cảm ơn!!
Tôi đoán là bạn sẽ quan tâm đến 'pstats.print_callers'. Một ví dụ là [ở đây] (http://www.doughellmann.com/PyMOTW/profile/). –
Muhammad, điều đó chắc chắn hữu ích! Ít nhất nó sửa chữa một vấn đề: tách các cuộc gọi chức năng tùy thuộc vào nguồn gốc. Tôi nghĩ câu trả lời của Joe Kington gần hơn với mục đích của tôi, nhưng print_callers() chắc chắn đã giúp tôi nửa chừng. Cảm ơn! – rocketmonkeys