web-dev-qa-db-ja.com

Python速度テスト-時間差-ミリ秒

コードのセクションを高速テストするためにPythonで2回比較する適切な方法は何ですか? APIドキュメントを読んでみました。 timedeltaのことを理解しているかわかりません。

これまでのところ、私はこのコードを持っています:

from datetime import datetime

tstart = datetime.now()
print t1

# code to speed test

tend = datetime.now()
print t2
# what am I missing?
# I'd like to print the time diff here
116
BuddyJoe

datetime.timedelta は、2つの日付時刻の差にすぎません...つまり、日/秒/マイクロ秒単位の期間のようなものです

>>> a = datetime.datetime.now()
>>> b = datetime.datetime.now()
>>> c = b - a

>>> c
datetime.timedelta(0, 4, 316543)
>>> c.days
0
>>> c.seconds
4
>>> c.microseconds
316543

c.microsecondsはタイムデルタのマイクロ秒部分のみを返すことに注意してください!タイミングのために、常にc.total_seconds()を使用してください。

Datetime.timedeltaを使用して、あらゆる種類の数学を実行できます。例:

>>> c / 10
datetime.timedelta(0, 0, 431654)

ただし、ウォールクロック時間ではなくCPU時間を調べる方が便利な場合があります...オペレーティングシステムに依存しますが... Unixライクなシステムでは、 'time'コマンドを確認してください。

171
NickZoic

Python 2.7以降、timedelta.total_seconds()メソッドがあります。したがって、経過したミリ秒を取得するには:

>>> import datetime
>>> a = datetime.datetime.now()
>>> b = datetime.datetime.now()
>>> delta = b - a
>>> print delta
0:00:05.077263
>>> int(delta.total_seconds() * 1000) # milliseconds
5077
48
f.cipriani

代わりに timeitモジュール を使用することもできます。

35
Darius Bacon

以下も使用できます。

import time

start = time.clock()
do_something()
end = time.clock()
print "%.2gs" % (end-start)

または、 pythonプロファイラー を使用できます。

19
Zitrax

私はこれが遅いことを知っていますが、私は実際に使用するのが本当に好きです:

import time
start = time.time()

##### your timed code here ... #####

print "Process time: " + (time.time() - start)

time.time()は、エポックからの秒数を示します。これは秒単位の標準化された時間であるため、終了時間から開始時間を差し引くだけでプロセス時間(秒単位)を取得できます。 time.clock()はベンチマークに適していますが、プロセスにかかった時間を知りたい場合は、役に立たないことがわかりました。たとえば、「私のプロセスには10プロセッサクロックユニットかかる」というよりも、「私のプロセスに10秒かかる」と言う方がはるかに直感的です。

>>> start = time.time(); sum([each**8.3 for each in range(1,100000)]) ; print (time.time() - start)
3.4001404476250935e+45
0.0637760162354
>>> start = time.clock(); sum([each**8.3 for each in range(1,100000)]) ; print (time.clock() - start)
3.4001404476250935e+45
0.05

上記の最初の例では、time.clock()の0.05の時間とtime.time()の0.06377の時間が示されています。

>>> start = time.clock(); time.sleep(1) ; print "process time: " + (time.clock() - start)
process time: 0.0
>>> start = time.time(); time.sleep(1) ; print "process time: " + (time.time() - start)
process time: 1.00111794472

2番目の例では、プロセスが1秒間スリープしていても、何らかの理由でプロセッサ時間が「0」を示しています。 time.time()は1秒より少し長く正しく表示されます。

14
mgoldwasser

単に差を印刷できます:

print tend - tstart
4
sth

次のコードは、時間の詳細を表示する必要があります...

from datetime import datetime

tstart = datetime.now()

# code to speed test

tend = datetime.now()
print tend - tstart
3
killy971

以下は、Matlab/Octaveのtictoc関数を模倣したカスタム関数です。

使用例:

time_var = time_me(); # get a variable with the current timestamp

... run operation ...

time_me(time_var); # print the time difference (e.g. '5 seconds 821.12314 ms')

機能:

def time_me(*arg):
    if len(arg) != 0: 
        elapsedTime = time.time() - arg[0];
        #print(elapsedTime);
        hours = math.floor(elapsedTime / (60*60))
        elapsedTime = elapsedTime - hours * (60*60);
        minutes = math.floor(elapsedTime / 60)
        elapsedTime = elapsedTime - minutes * (60);
        seconds = math.floor(elapsedTime);
        elapsedTime = elapsedTime - seconds;
        ms = elapsedTime * 1000;
        if(hours != 0):
            print ("%d hours %d minutes %d seconds" % (hours, minutes, seconds)) 
        Elif(minutes != 0):
            print ("%d minutes %d seconds" % (minutes, seconds))
        else :
            print ("%d seconds %f ms" % (seconds, ms))
    else:
        #print ('does not exist. here you go.');
        return time.time()
2
Ulad Kasach

私はPythonプログラマーではありませんが、 Googleの使用方法は知っています ここで見つけたのは、「-」演算子を使用することです。コードを完成させるには:

from datetime import datetime

tstart = datetime.now()

# code to speed test

tend = datetime.now()
print tend - tstart

さらに、strftime()関数を使用してタイムスパン計算をフォーマットして、時間をレンダリングできるように見えますが、あなたは満足しています。

2
Mike C.

time.time()/ datetimeはすぐに使用するのに適していますが、必ずしも100%正確ではありません。そのため、私はstd lib profilers (特にhotshot)の1つを使用して、何が何であるかを見つけるのが好きです。

2
nilamo

profile モジュールを調べてください。あなたはあなたのスローダウンがどこにあるかをより良く読むことができ、あなたの仕事の多くは完全に自動化されます。

2
Stefan Kendall

このようなtimeitを使用して、module.pyという名前のスクリプトをテストできます。

$ python -mtimeit -s 'import module'
0
Dhiraj Thakur