2014-03-03 61 views
0

我想獲得分析器的統計數據,不是通過調用次數來分組,而是通過花費的時間來分組,而不是通過自然執行順序cProfiler:如何通過執行順序獲取統計信息?

例如,如果我們使用cProfiler下一個簡單的程序:

def my_sleep0(): 
    sleep(0.05) 

def my_sleep1(): 
    sleep(0.15) 
    my_sleep2() 

def my_sleep2(): 
    my_sleep3() 

def my_sleep3(): 
    sleep(0.1) 


if __name__ == '__main__': 

    p = Profiler('./') # a wrapper for cProfiler, cProfiler starts here 

    i = 10 

    for i in range(1, 5): 
     i += 100 
     my_sleep0() 
     my_sleep1() 
     my_sleep1() 

    # cProfiler destructs and ends here 

我想自然的執行順序的統計,例如:

Ordered by: execution 

calling_function cumtime backtrace 

test.py:36(my_sleep0) <cumtime> test.py:43() 
test.py:39(my_sleep1) <cumtime> test.py:44() 
test.py:43(my_sleep2) <cumtime> test.py:20 called by test.py:44(my_sleep1) 
test.py:43(my_sleep3) <cumtime> test.py:25 called by test.py:20(my_sleep1)->test.py:26(my_sleep2) 
test.py:39(my_sleep1) <cumtime> test.py:45() 
test.py:43(my_sleep2) <cumtime> test.py:20 called by test.py:25(my_sleep1) 
test.py:43(my_sleep3) <cumtime> test.py:25 called by test.py:20(my_sleep1)->test.py:26(my_sleep2) 
... 

<cumtime>是一個數字的時間。 )

Python中是否有方法實現它?怎麼樣?

加法。

我的探查的代碼()不現在就做:

class Profiler: 
    def __init__(self, dir): 
     self._profiler = cProfile.Profile() 
     self._profiler.enable() 

     self._dir = dir # profiler output is "/tmp/profiler/{key}/<files_here>" 


    def stop(self): 
     profilerDir = self._dir 

     self._profiler.disable() 

     with open(os.path.join(profilerDir, datetime.now().strftime("%d-%m-%y %H.%M.%S")), 'w') as f: 
      stat = pstats.Stats(self._profiler, stream = f).sort_stats('pcalls') 
      stat.print_stats() 
      stat.print_callers() 
      stat.print_callees() 


    def __del__(self): 
     self.stop() 
+0

@KillianDS好的。但看起來cProfiler沒有這個功能。我想知道是否有工具或方法來實現我想要的。 – sergzach

+0

您可以按行排序。爲什麼要按(第一個?)執行時間排序?這對你有什麼好處? – KillianDS

+0

@KillianDS我想按執行順序排序,而不是按執行時間排序。打擾一下。 – sergzach

回答

1

是的,但在許多情況下,它是不該做一個明智的事情(慢)的部分代碼可以被稱爲多在執行過程中,您可以執行的操作是運行跟蹤並使用它的輸出對配置文件條目進行排序。

I.e.跟蹤會告訴您執行的順序並可用於對配置文件數據進行排序。

我會認真考慮查看配置文件查看器工具,例如runsnakerun。下面讓我看看花了多少時間和它從哪裏調用: enter image description here

+0

謝謝。你知道該怎麼做嗎?一個特別的功能,方法不會太慢? – sergzach

+0

正如我所說 - 跟蹤會給你一個執行的順序 - 解析結果,其中包括文件,行,功能信息和配置文件,其中包括文件,行功能信息,和*排序*配置文件結果執行訂購。然後輸出結果。在任何複雜的情況下,它幾乎是無用的。 –

+0

我可以在生產服務器上使用跟蹤,有許多用戶有時會出現放緩問題嗎? – sergzach