我一直在使用cProfile來剖析我的代碼,並且它一直在很好地工作。我還使用gprof2dot.py來顯示結果(使其更清晰一些)。如何逐行分析python代碼?
但是,cProfile(以及目前爲止我所見過的大多數其他Python配置文件)似乎只能在函數調用級別進行配置。當某些功能從不同的地方被調用時,這會引起混淆 - 我不知道1號或2號呼叫是否佔用大部分時間。當所討論的功能是6個層次時,這會變得更糟,從另外7個地方調用。
所以我的問題是:如何獲得一行一行的分析?取而代之的是:
function #12, total time: 2.0s
我希望看到這樣的事情:
function #12 (called from somefile.py:102) 0.5s
function #12 (called from main.py:12) 1.5s
CPROFILE並展示瞭如何的總時間要「轉讓」給父母,但這又連接丟失當你有一堆層和相互聯繫的電話。
理想情況下,我很想有一個可以解析數據的GUI,然後向我展示我的源文件,並給出每行的總時間。事情是這樣的:
main.py:
a = 1 # 0.0s
result = func(a) # 0.4s
c = 1000 # 0.0s
result = func(c) # 5.0s
然後,我可以點擊第二個「FUNC(三)」打電話,看看有什麼佔用時間在這一號召,從「FUNC(一)」呼叫分開。
這有道理嗎?是否有任何分析庫收集此類信息?有沒有我錯過的一些很棒的工具?任何反饋意見。謝謝!!
我的猜測是,你會感興趣的'pstats.print_callers'。一個例子是[這裏](http://www.doughellmann.com/PyMOTW/profile/)。 – 2010-10-13 20:18:59
穆罕默德,這絕對有幫助!至少它解決了一個問題:根據原點分離函數調用。我認爲喬金頓的答案更接近我的目標,但print_callers()肯定會讓我獲得一半。謝謝! – rocketmonkeys 2010-10-14 15:25:25