2012-08-09 47 views
3

某些機構能幫助我如何查找python中的代碼需要多少時間和多少內存?計算python中的代碼的計算時間和內存

+0

見[這個問題](http://stackoverflow.com/questions/897941/python-equivalent-of-phps-memory-get-usage),用於計算所使用的總存儲器。 – machow 2012-08-09 15:43:55

+0

我的回答對你有幫助嗎? – 2012-10-03 15:57:54

+0

的確是在等待時間。 – 2012-10-04 20:08:13

回答

9

使用此用於計算時間:

import time 

time_start = time.clock() 
#run your code 
time_elapsed = (time.clock() - time_start) 

作爲由Python文檔引用:

time.clock()

在Unix,返回當前處理器時間點數以秒爲單位浮點數 。精確度,實際上「處理器時間」含義的定義取決於具有相同名稱的C函數的定義,但在任何情況下,這都是 用於基準測試Python或定時算法的功能。

在Windows上,此函數根據 Win32函數QueryPerformanceCounter()以 作爲浮點數第一次調用該函數以來的時間間隔秒數。分辨率通常爲 ,優於1微秒。

參考http://docs.python.org/library/time.html


使用此用於計算存儲器:

import resource 

resource.getrusage(resource.RUSAGE_SELF).ru_maxrss 

參考http://docs.python.org/library/resource.html

+0

這會得到他的時間,但不會使用記憶。 – edhedges 2012-08-09 15:37:02

+0

感謝名單...我使用Windows Python和我覺得你描述的內存計算是Linux? – 2012-08-09 15:51:09

+0

它也適用於Windows。閱讀上面的描述。 – 2012-08-09 15:59:57

1

使用一個內存分析器等孔雀

>>> from guppy import hpy; h=hpy() 
>>> h.heap() 
Partition of a set of 48477 objects. Total size = 3265516 bytes. 
Index Count %  Size % Cumulative % Kind (class/dict of class) 
    0 25773 53 1612820 49 1612820 49 str 
    1 11699 24 483960 15 2096780 64 tuple 
    2 174 0 241584 7 2338364 72 dict of module 
    3 3478 7 222592 7 2560956 78 types.CodeType 
    4 3296 7 184576 6 2745532 84 function 
    5 401 1 175112 5 2920644 89 dict of class 
    6 108 0 81888 3 3002532 92 dict (no owner) 
    7 114 0 79632 2 3082164 94 dict of type 
    8 117 0 51336 2 3133500 96 type 
    9 667 1 24012 1 3157512 97 __builtin__.wrapper_descriptor 
<76 more rows. Type e.g. '_.more' to view.> 
>>> h.iso(1,[],{}) 
Partition of a set of 3 objects. Total size = 176 bytes. 
Index Count %  Size % Cumulative % Kind (class/dict of class) 
    0  1 33  136 77  136 77 dict (no owner) 
    1  1 33  28 16  164 93 list 
    2  1 33  12 7  176 100 int 
>>> x=[] 
>>> h.iso(x).sp 
0: h.Root.i0_modules['__main__'].__dict__['x'] 
0

有一個非常好的庫叫做jackedCodeTimerPy計時你的代碼。然後你應該使用Daniel Li建議的資源包。

jackedCodeTimerPy給像

label   min   max   mean  total run count 
------- ----------- ----------- ----------- ----------- ----------- 
imports 0.00283813 0.00283813 0.00283813 0.00283813    1 
loop  5.96046e-06 1.50204e-05 6.71864e-06 0.000335932   50 

我喜歡它是如何給你就可以了統計和定時器運行次數真的好報告。

它使用簡單。如果我想測量時間碼進入for循環,我只需執行以下操作:

from jackedCodeTimerPY import JackedTiming 
JTimer = JackedTiming() 

for i in range(50): 
    JTimer.start('loop') # 'loop' is the name of the timer 
    doSomethingHere = 'This is really useful!' 
    JTimer.stop('loop') 
print(JTimer.report()) # prints the timing report 

您也可以同時運行多個定時器。

JTimer.start('first timer') 
JTimer.start('second timer') 
do_something = 'amazing' 
JTimer.stop('first timer') 

do_something = 'else' 
JTimer.stop('second timer') 

print(JTimer.report()) # prints the timing report 

還有更多的使用示例在回購。希望這可以幫助。

https://github.com/BebeSparkelSparkel/jackedCodeTimerPY