0

このコードを使用して、関数が実行できる回数、たとえば 10 秒をベンチマークしようとしています。

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いますが、正しい方法を思いつくことはできません。

誰かが私を正しい方向に押してくれますか? その方法を学ぶことを優先して、「実際のベンチマーク ツール」を避けたいと思います。

4

2 に答える 2

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
于 2013-05-28T19:25:00.867 に答える
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) )
于 2013-05-28T19:14:38.390 に答える