web-dev-qa-db-ja.com

Pythonでコードの行間にかかる時間を測定する方法は?

そのため、Javaでは 実行する関数にかかる時間を測定する方法

しかし、それはPythonでどのように行われますか?コードの行間の時間の開始時間と終了時間を測定するには?これを行うもの:

import some_time_library

starttime = some_time_library.some_module()
code_tobe_measured() 
endtime = some_time_library.some_module()

time_taken = endtime - starttime
56
alvas

CPU時間を測定する場合、Python 3.3以上の場合はtime.process_time()を使用できます。

_import time
start = time.process_time()
# your code here    
print(time.process_time() - start)
_

最初の呼び出しはタイマーをオンにし、2番目の呼び出しは経過した秒数を示します。

関数time.clock()もありますが、それは Python 3. 以降廃止され、Python = 3.8。

timeitprofileのような優れたプロファイリングツールがありますが、これはCPU時間を測定し、これがあなたが求めているものです。

代わりに壁時計時間を測定する場合は、time.time()を使用します。

95

import timeライブラリを使用することもできます:

start = time.time()
   #your code
end = time.time()
time_taken = end - start
print('Time: ',time_taken)
34

小さな便利なクラスの助けを借りて、次のようにインデントされた行に費やされた時間を測定することができます:

_with CodeTimer():
   line_to_measure()
   another_line()
   # etc...
_

インデントされた行の実行が終了すると、次のように表示されます。

_Code block took: x.xxx ms
_

UPDATE:_pip install linetimer_でクラスを取得し、_from linetimer import CodeTimer_で取得できるようになりました。 このGitHubプロジェクト を参照してください。

上記のクラスのコード:

_import timeit

class CodeTimer:
    def __init__(self, name=None):
        self.name = " '"  + name + "'" if name else ''

    def __enter__(self):
        self.start = timeit.default_timer()

    def __exit__(self, exc_type, exc_value, traceback):
        self.took = (timeit.default_timer() - self.start) * 1000.0
        print('Code block' + self.name + ' took: ' + str(self.took) + ' ms')
_

次に、測定したいコードブロックに名前を付けます

_with CodeTimer('loop 1'):
   for i in range(100000):
      pass

with CodeTimer('loop 2'):
   for i in range(100000):
      pass

Code block 'loop 1' took: 4.991 ms
Code block 'loop 2' took: 3.666 ms
_

そしてnestそれら:

_with CodeTimer('Outer'):
   for i in range(100000):
      pass

   with CodeTimer('Inner'):
      for i in range(100000):
         pass

   for i in range(100000):
      pass

Code block 'Inner' took: 2.382 ms
Code block 'Outer' took: 10.466 ms
_

timeit.default_timer()に関しては、OSとPythonバージョン、 この回答 を参照)に基づいて最適なタイマーを使用します。

14
Justas

私は常に時間、分、秒(%H:%M:%S)形式で時間をチェックすることを好みます:

from datetime import datetime
start = datetime.now()
# your code
end = datetime.now()
time_taken = end - start
print('Time: ',time_taken) 

出力:

Time:  0:00:00.000019
2
Sayali Sonawane