2011-04-21 219 views
1

大約8-9年前,我看到了一個用於Visual Studio的工具(我不記得名字),它可以可視化函數調用及其性能。我真的很喜歡它,所以我想知道是否有類似於Python的東西。比方說,你有三個功能:性能分析器

def first_func(): 
    ... 

def second_func(): 
    ... 
    for i in xrange(10): 
     first_function() 
    ... 

def third_func(): 
    ... 
    for i in xrange(5): 
     second_function() 
    ... 

因此,該工具的最終報告是這樣的(包括連接圖):

first_func[avg 2ms] <--50 times--< second_func[avg 25ms] <--5 times--< third_func[avg 140ms] 

這樣的工具將使它更容易找到瓶頸進入系統。特別是對於大型系統。

+1

代碼吧!我會用它! – 2011-04-21 18:03:57

+0

@eat_a_lemon :))如果我找不到類似的東西,我會盡力自己實現。在開始研究之前,我只想檢查是否有任何與之相關的東西。 – pocoa 2011-04-21 18:08:27

回答

3

您可以使用與python安裝捆綁在一起的分析器。 Python Profiler Link

+0

可以,應該。 – nmichaels 2011-04-21 18:14:08

+0

是的,這很有用,但是它的報告沒有提供任何有關這些功能關係的信息,你需要自己弄清楚。 – pocoa 2011-04-21 18:35:32

+1

@pocoa:確實如此,但獲得指標是很難的部分。從那裏你可以編寫你自己的Python腳本,這將允許你選擇你想要比較的函數的數據。我認爲你很難找到一個能夠自動比較「魔術」功能的工具。我說'魔術',因爲只有你知道你想比較類似邏輯的功能。 – 2011-04-21 19:10:40

1

認爲你需要知道的事情是多少次被調用,他們需要多少時間(自我對包容性)以及誰在多少時間內調用誰,這是很常見的。 然後,你可以把你的偵探的帽子,並希望偵察出問題的地方。

還有一種方法是詢問,不是關於函數,而是代碼行,它們在堆棧上的掛鐘時間百分比。原因是,如果這樣的代碼行可以避免浪費時間,避免它或刪除它或以不同的方式工作,那麼百分比就是可以節省多少。 你不必成爲一個偵探來查明它。 代碼中的任何瓶頸都必須顯示爲這樣一行,並且精確的百分比並不重要。 Here's an example.

2

行由行時間和執行頻率分析器:

首先,安裝line_profiler

其次,要與@profile裝飾來衡量裝飾功能修改源代碼。

三,kernprof -l -v yourscript.py

-l選項告訴kernprof注入@profile裝飾到腳本的內建命令,並-v告訴kernprof一旦你完成腳本來顯示時間信息。

輸出:

enter image description here