86

Python プログラムでコードのブロックを評価するために経過した時間を測定したいと思います。おそらく、ユーザーの CPU 時間、システムの CPU 時間、および経過時間を分離します。

モジュールは知っていtimeitますが、多くの自己記述関数があり、セットアップ プロセスでそれらを渡すのは簡単ではありません。

私はむしろ次のように使用できるものが欲しいです:

#up to here I have done something....
start_counting() #or whatever command used to mark that I want to measure
                   #the time elapsed in the next rows
# code I want to evaluate
user,system,elapsed = stop_counting() #or whatever command says:
                                      #stop the timer and return the times

ユーザーとシステムの CPU 時間は必須ではありませんが (測定したいのですが)、経過時間については、複雑なコマンドやモジュールを使用するのではなく、このようなことができるようにしたいと考えています。

4

6 に答える 6

175

経過時間を秒単位で取得するには、次を使用できますtimeit.default_timer()

import timeit
start_time = timeit.default_timer()
# code you want to evaluate
elapsed = timeit.default_timer() - start_time

timeit.default_timer()代わりに、time.time()またはtime.clock()任意のプラットフォームに対してより高い解像度を持つタイミング関数を選択するために使用されます。

于 2013-03-29T16:19:00.707 に答える
27

私は常にデコレーターを使用して、実行時間を取得するなど、既存の関数に対して追加の作業を行います。Pythonic でシンプルです。

import time

def time_usage(func):
    def wrapper(*args, **kwargs):
        beg_ts = time.time()
        retval = func(*args, **kwargs)
        end_ts = time.time()
        print("elapsed time: %f" % (end_ts - beg_ts))
        return retval
    return wrapper

@time_usage
def test():
    for i in xrange(0, 10000):
        pass

if __name__ == "__main__":
    test()
于 2013-03-29T16:36:15.363 に答える