2013-05-28 62 views
0

我試圖基準的功能有多少次能夠在運行,比如10秒,使用此代碼:重複永遠但報告每個x秒

import time 

window = 10 

while True: 
    n = 0 
    while time.time() % window: 
     test()  # which really runs only a fragment of a second 
     n = n + 1 
    print "n: %s" % n 

test()一直沒有我跑了個遍看到任何輸出(方式長於10秒)。我明白time.time() % window可能是天真的,但我不能想出正確的方法。

有沒有人能把我推向正確的方向?我想避免使用「真正的基準測試工具」來傾向於學習如何去做。

+1

如果你想使用的東西更強大一點,請查看[cProfile](http://docs.python.org/2/library/profile.html#module-cProfile)。我以前用它來進行性能調試,它運行良好。對不起,我剛讀完最後一部分。如果有其他人想要使用「真正的基準測試工具」,我會在這裏留下。 :) – Andy

回答

0

這確實是我想要的(加上避免了模危險):

import time 

def testFor(w, fn): 
    n = 0 
    start = time.time() 
    while (time.time() - start) < w: 
     fn() 
     n = n + 1 
    return n 

window = 10 

while True: 
    n = testFor(window, test) 
    print "n: %s" % n 
0

time.time()正在返回時間的浮點表示形式。

當你模量的時候,就會幾乎從來沒有它恰好返回0。

考慮使用:int(time.time()) % window


擡起頭,但:你會在年底想你的睡眠循環以防止每個「基準」多次運行外部循環。您可以通過基準每次X次迭代而不是每次X次迭代來避免這種情況。


時間每-X-迭代粗糙例如:

window = 1000 
start = time.time() 
n = 0 

while True: 
    test() 
    n = n + 1 

    if n % window == 0: 
     print "Average: %f/sec" % (n/(time.time() - start)) 
+0

我已經嘗試過'int(time.time())%window',但是它存在的問題是它的真實性比在10秒內的次數多得多。 –

+0

如果你想追求這條路線,你可以在打印後添加'while int(time.time())%window == 0:pass'。 –