Pythonプログラムの実行時間を取得するにはどうすればよいですか?


976

Pythonのコマンドラインプログラムを終了するのに時間がかかります。実行が完了するまでの正確な時間を知りたい。

私はtimeitモジュールを見てきましたが、それはコードの小さなスニペットのみのためのようです。プログラム全体の時間を計りたい。

回答:


1720

Pythonの最も簡単な方法:

import time
start_time = time.time()
main()
print("--- %s seconds ---" % (time.time() - start_time))

これは、プログラムの実行に少なくとも10分の1秒かかることを前提としています。

プリント:

--- 0.764891862869 seconds ---

58
ただし、これはリアルタイム(他のプログラムで使用される時間を含む)を計算するため、コンピューターが他の処理に忙しい場合は時間がかかるようです
newacct

35
Windowsでも同じことを行いますが、time.time()の代わりにtime.clock()を使用します。精度が少し向上します。
Corey Goldberg、

33
私はそうすることをお勧めしますround(time.time() - start_time, 2)(またはあなたが望むどんな小数でも)、私は1.24e-5のような科学的数値を取り戻していました。
ThorSummoner、2015

16
@ThorSummoner:おそらくここの'%.2f'代わりにしたいでしょうround()
jfs 2015

10
この方法には大きな欠陥があります。プログラムの実行中にシステム時刻が変更された場合(タイムサーバーとの同期など)、この方法は機能しないか、コードが壊れる可能性があります(負の期間...)
Gilad

210

このtiming.pyモジュールを自分のsite-packagesディレクトリに置き、モジュールimport timingの上部に挿入します:

import atexit
from time import clock

def secondsToStr(t):
    return "%d:%02d:%02d.%03d" % \
        reduce(lambda ll,b : divmod(ll[0],b) + ll[1:],
            [(t*1000,),1000,60,60])

line = "="*40
def log(s, elapsed=None):
    print line
    print secondsToStr(clock()), '-', s
    if elapsed:
        print "Elapsed time:", elapsed
    print line
    print

def endlog():
    end = clock()
    elapsed = end-start
    log("End Program", secondsToStr(elapsed))

def now():
    return secondsToStr(clock())

start = clock()
atexit.register(endlog)
log("Start Program")

timing.logプログラム内に表示したい重要なステージがある場合は、プログラム内から呼び出すこともできます。ただし、これを含めるだけでimport timing、開始時刻と終了時刻、および全体の経過時間が出力されます。(私の曖昧なsecondsToStr関数を許してください、それは秒の浮動小数点数をhh:mm:ss.sss形式にフォーマットするだけです。)

注:上記のコードのPython 3バージョンは、ここまたはこちらにあります


8
これは、Ctrl-Cを押してプログラムを停止した場合にも機能する実際のクリーンなソリューションです。
ソリン

素晴らしい解決策私は間違いなくそれを使用し、ボトルネック関数を特定するためのタイミングデコレータを作成します
c24b

9
Python 3の場合from functools import reduceは、上部に追加 し、各印刷ステートメントを角かっこで囲みます。よく働く!
PowerApp101 2015

2
@ PowerApp101-ありがとう-Nicojoの答えは、このモジュールのPy3フレンドリーバージョンを提供します。
PaulMcG 2015

4
注:time.clock()は「バージョン3.3で非推奨:この関数の動作はプラットフォームによって異なります。要件に応じて、代わりにperf_counter()[スリープ時間あり]またはprocess_time()を使用してください」明確に定義された行動を持っている。」
mab 2015年

175

LinuxまたはUnixの場合:

$ time python yourprogram.py

Windowsでは、このStackOverflowの質問を参照してください:Windowsコマンドラインでコマンドの実行時間を測定するにはどうすればよいですか?

より詳細な出力については、

$ time -v python yourprogram.py
    Command being timed: "python3 yourprogram.py"
    User time (seconds): 0.08
    System time (seconds): 0.02
    Percent of CPU this job got: 98%
    Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.10
    Average shared text size (kbytes): 0
    Average unshared data size (kbytes): 0
    Average stack size (kbytes): 0
    Average total size (kbytes): 0
    Maximum resident set size (kbytes): 9480
    Average resident set size (kbytes): 0
    Major (requiring I/O) page faults: 0
    Minor (reclaiming a frame) page faults: 1114
    Voluntary context switches: 0
    Involuntary context switches: 22
    Swaps: 0
    File system inputs: 0
    File system outputs: 0
    Socket messages sent: 0
    Socket messages received: 0
    Signals delivered: 0
    Page size (bytes): 4096
    Exit status: 0

したがって、別のウィジェットを起動する場合、QTアプリケーションの例では、そのウィジェットが表示されるまでにかかる時間をどのように計算しますか?
Ciasto piekarz 2013

1
ウィジェットの場合、Pythonプログラムから起動する場合は、rogeriopvlが承認した回答を使用してください。
steveha 2013

しかし、それは分:秒で時間を与えていないようですが、浮動小数点数になります!!
Ciasto piekarz 2013

3
はい、それは秒数を与えます。必要に応じて、min:secondsに変換できます。ポール・マクガイアの答えとそのsecondsToStr()機能を見てください。
steveha 2013

68

ポールマクガイアの答えは本当に好きですが、私はPython 3を使用しています。したがって、興味のある人のために、* nixでPython 3を使用する彼の回答の変更を以下に示します(Windowsでは、clock()代わりに使用する必要があると思いますtime())。

#python3
import atexit
from time import time, strftime, localtime
from datetime import timedelta

def secondsToStr(elapsed=None):
    if elapsed is None:
        return strftime("%Y-%m-%d %H:%M:%S", localtime())
    else:
        return str(timedelta(seconds=elapsed))

def log(s, elapsed=None):
    line = "="*40
    print(line)
    print(secondsToStr(), '-', s)
    if elapsed:
        print("Elapsed time:", elapsed)
    print(line)
    print()

def endlog():
    end = time()
    elapsed = end-start
    log("End Program", secondsToStr(elapsed))

start = time()
atexit.register(endlog)
log("Start Program")

これが便利だと思った場合でも、彼がほとんどの作業を行ったので、この答えの代わりに彼の答えに賛成投票してください;)。


1
私が見つかりましtimedelta(seconds=t).total_seconds()役立ちます。
nu everest 2015年

これらの関数が何をするか説明できますか?logコマンドのsは何ですか?アテシットとは?
SumNeuron

@SumNeuron、つまり、これらの関数は、使用するプログラムの実行時間を出力します。sはログの最初の引数であり、文字列でなければなりません。ログは、タイミング情報を出力する機能です。atexitは、プログラムの出口で呼び出される関数を登録できるpythonモジュールです。
Nicojo 2016

@Nicojoとても役に立ちました。このコードを使用して、ループの実行時間などをテストする方法について質問があります。ループを含む関数があり、このループで費やされた時間を取得したいとします
moudi

@moudiこの質問への一番の答えはあなたの最善の策です。ループの直前に開始時間を設定し、ループの出口での経過時間を計算するだけです。
ニコジョ

67
import time

start_time = time.clock()
main()
print time.clock() - start_time, "seconds"

time.clock()プロセッサ時間を返します。これにより、このプロセスで使用されている時間のみを計算できます(とにかくUnix上で)。ドキュメントには、「いずれにしても、これはPythonまたはタイミングアルゴリズムのベンチマークに使用する関数です」と書かれています。


14
time.time()は* nixで最適に使用されます。time.clock()はWindowsで最適に使用されます。
Corey Goldberg、

これはシステム時間を使用し、他のシステムプロセスの影響を受けるため、「このプロセスで使用される時間のみ」の計算には使用できないと思いますか?私がこれについて間違っているなら私を訂正してください:)
AnnanFay 2013

6
注:time.clock()は「バージョン3.3で非推奨:この関数の動作はプラットフォームによって異なります。要件に応じて、代わりにperf_counter()[スリープ時間あり]またはprocess_time()を使用してください」明確に定義された行動を持っている。」
mab 2015年

55

datetimeモジュールが提供する出力が好きです。時間デルタオブジェクトは、必要に応じて日、時、分などを人間が読める方法で示します。

例えば:

from datetime import datetime
start_time = datetime.now()
# do your work here
end_time = datetime.now()
print('Duration: {}'.format(end_time - start_time))

サンプル出力例

Duration: 0:00:08.309267

または

Duration: 1 day, 1:51:24.269711

JF Sebastianが述べたように、このアプローチは現地時間でいくつかのトリッキーなケースに遭遇する可能性があるため、使用する方が安全です。

import time
from datetime import timedelta
start_time = time.monotonic()
end_time = time.monotonic()
print(timedelta(seconds=end_time - start_time))

1
@phansen:timedelta(seconds=time.monotonic()-start)ここで(またはtime.time()間隔が大きい場合)使用できます。現地時間を表す単純なdatetimeオブジェクトを減算しないでください。現地時間は単調ではありません
jfs 2015

OK、という意味ですstart_time = time.monotonic(); end_time = time.monotonic(); timedelta(seconds=end_time - start_time)。私はあなたが正しいと信じていますが、それからあなたは戻ってくるときにそれをフォーマットする必要もありますdatetime.timedelta(0, 0, 76)。また、単調な方法が唯一のPython 3で追加されたようだ
metakermit

あ、そう。あなたはstr()それを「人間」にするためにそれに渡すことができると思います。回答を更新します、ありがとう。
metakermit 2015年

53

PythonプロファイラーcProfileを使用して、CPU時間、さらに各関数内で費やされた時間と各関数が呼び出された回数を測定できます。これは、どこから始めればよいかわからずにスクリプトのパフォーマンスを向上させたい場合に非常に役立ちます。別のスタックオーバーフローの質問に対するこの回答はかなり良いです。ドキュメントもよく見るとよいでしょう。

コマンドラインからcProfileを使用してスクリプトをプロファイルする方法の例を次に示します。

$ python -m cProfile euler048.py

1007 function calls in 0.061 CPU seconds

Ordered by: standard name
ncalls  tottime  percall  cumtime  percall filename:lineno(function)
    1    0.000    0.000    0.061    0.061 <string>:1(<module>)
 1000    0.051    0.000    0.051    0.000 euler048.py:2(<lambda>)
    1    0.005    0.005    0.061    0.061 euler048.py:2(<module>)
    1    0.000    0.000    0.061    0.061 {execfile}
    1    0.002    0.002    0.053    0.053 {map}
    1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler objects}
    1    0.000    0.000    0.000    0.000 {range}
    1    0.003    0.003    0.003    0.003 {sum}

@jacwah合計時間をどのように合計しますか?
チャック

@チャック最初の行は言うX function calls in Y CPU seconds。壁掛け時計が必要な場合は、ここで他の回答のいずれかを使用してください。
jacwah 2018年

28

Linuxにはさらに良い: time

$ time -v python rhtest2.py

    Command being timed: "python rhtest2.py"
    User time (seconds): 4.13
    System time (seconds): 0.07
    Percent of CPU this job got: 91%
    Elapsed (wall clock) time (h:mm:ss or m:ss): 0:04.58
    Average shared text size (kbytes): 0
    Average unshared data size (kbytes): 0
    Average stack size (kbytes): 0
    Average total size (kbytes): 0
    Maximum resident set size (kbytes): 0
    Average resident set size (kbytes): 0
    Major (requiring I/O) page faults: 15
    Minor (reclaiming a frame) page faults: 5095
    Voluntary context switches: 27
    Involuntary context switches: 279
    Swaps: 0
    File system inputs: 0
    File system outputs: 0
    Socket messages sent: 0
    Socket messages received: 0
    Signals delivered: 0
    Page size (bytes): 4096
    Exit status: 0

18

時計()

バージョン3.3で廃止:この関数の動作はプラットフォームに依存します。明確に定義された動作を実現するには、要件に応じて代わりにperf_counter()またはprocess_time()を使用します。

time.perf_counter()

パフォーマンスカウンターの値(小数秒単位)を返します。つまり、短い期間を測定するために利用可能な最高の解像度を持つクロックです。これに、スリープ中に経過した時間含まれ、システム全体に影響します。

time.process_time()

現在のプロセスのシステムとユーザーCPU時間の合計の値(小数秒単位)を返します。睡眠中に経過した時間含まれません

start = time.process_time()
... do something
elapsed = (time.process_time() - start)

1
おそらく、「time.process_time()を使用する」(または類似の)結論から始めますか?
Peter Mortensen

17

timeitモジュールを使用するだけです。Python 2とPython 3の両方で動作します。

import timeit

start = timeit.default_timer()

# All the program statements
stop = timeit.default_timer()
execution_time = stop - start

print("Program Executed in "+str(execution_time)) # It returns time in seconds

秒単位で戻り、実行時間を確保できます。簡単ですが、プログラムの実行を開始するw main関数にこれらを記述してください。エラーが発生した場合でも実行時間を取得したい場合は、パラメーター「Start」を取得して、次のように計算します。

def sample_function(start,**kwargs):
     try:
         # Your statements
     except:
         # except statements run when your statements raise an exception
         stop = timeit.default_timer()
         execution_time = stop - start
         print("Program executed in " + str(execution_time))

パーツの下にあるべきではありませんfinallyか?
アルパース

12

次のスニペットは、経過時間を人間が読める<HH:MM:SS>形式で出力します。

import time
from datetime import timedelta

start_time = time.time()

#
# Perform lots of computations.
#

elapsed_time_secs = time.time() - start_time

msg = "Execution took: %s secs (Wall clock time)" % timedelta(seconds=round(elapsed_time_secs))

print(msg)    

1
ここまでずっと、最も健全な答えを見つけます(「健全」とは、組み込みに依存しているため、タイピングが最も少ないという意味です)。
ijoseph 2017

8
from time import time
start_time = time()
...
end_time = time()
time_taken = end_time - start_time # time_taken is in seconds
hours, rest = divmod(time_taken,3600)
minutes, seconds = divmod(rest, 60)


8

私はtimeitモジュールを見てきましたが、それはコードの小さなスニペットのみのためのようです。プログラム全体の時間を計りたい。

$ python -mtimeit -n1 -r1 -t -s "from your_module import main" "main()"

your_module.main()関数を1回実行し、time.time()関数をタイマーとして使用して経過時間を出力します。

/usr/bin/timePythonでエミュレートするには、/ usr / bin / timeを使用したPythonサブプロセスを参照してください。タイミング情報をキャプチャして、他のすべての出力を無視する方法は?

time.sleep()各関数のCPU時間を測定するには(たとえば、中に時間を含めないでください)、profileモジュール(cProfilePython 2)を使用できます。

$ python3 -mprofile your_module.py

あなたは合格可能性-ptimeitあなたは同じタイマーを使用したい場合は、上記のコマンドprofileモジュールの使用。

Pythonスクリプトどのようにプロファイリングできるかをご覧ください


7

Paul McGuireの回答も気に入って、自分のニーズにより適したコンテキストマネージャフォームを思いつきました。

import datetime as dt
import timeit

class TimingManager(object):
    """Context Manager used with the statement 'with' to time some execution.

    Example:

    with TimingManager() as t:
       # Code to time
    """

    clock = timeit.default_timer

    def __enter__(self):
        """
        """
        self.start = self.clock()
        self.log('\n=> Start Timing: {}')

        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        """
        """
        self.endlog()

        return False

    def log(self, s, elapsed=None):
        """Log current time and elapsed time if present.
        :param s: Text to display, use '{}' to format the text with
            the current time.
        :param elapsed: Elapsed time to display. Dafault: None, no display.
        """
        print s.format(self._secondsToStr(self.clock()))

        if(elapsed is not None):
            print 'Elapsed time: {}\n'.format(elapsed)

    def endlog(self):
        """Log time for the end of execution with elapsed time.
        """
        self.log('=> End Timing: {}', self.now())

    def now(self):
        """Return current elapsed time as hh:mm:ss string.
        :return: String.
        """
        return str(dt.timedelta(seconds = self.clock() - self.start))

    def _secondsToStr(self, sec):
        """Convert timestamp to h:mm:ss string.
        :param sec: Timestamp.
        """
        return str(dt.datetime.fromtimestamp(sec))

7

Jupyter Notebookを使用しているデータ担当者向け

セルでは、Jupyterの%%timemagicコマンドを使用して実行時間を測定できます。

%%time
[ x**2 for x in range(10000)]

出力

CPU times: user 4.54 ms, sys: 0 ns, total: 4.54 ms
Wall time: 4.12 ms

これは、特定のセルの実行時間のみをキャプチャします。ノートブック全体(つまりプログラム)の実行時間をキャプチャする場合は、同じディレクトリに新しいノートブックを作成し、新しいノートブックですべてのセルを実行します。

上記のノートブックが呼び出されたとしexample_notebook.ipynbます。同じディレクトリ内の新しいノートブックで:

# Convert your notebook to a .py script:
!jupyter nbconvert --to script example_notebook.ipynb

# Run the example_notebook with -t flag for time
%run -t example_notebook

出力

IPython CPU timings (estimated):
  User   :       0.00 s.
  System :       0.00 s.
Wall time:       0.00 s.

5

timeitPythonコードの実行時間を計測するために使用できるモジュールがあります。

詳細なドキュメントとPythonドキュメントの例、26.6があります。timeit —小さなコードスニペットの実行時間を測定します


OP timeitは質問で明示的に言及します。問題は、それをここでどのように使用できるかです(または、ここで使用する必要があり、代替手段は何ですか)。ここだ可能答えが
jfs 2015

5

line_profilerを使用します

line_profilerは、コードの個々の行の実行にかかる時間をプロファイルします。プロファイラーは、プロファイリングのオーバーヘッドを減らすために、Cythonを介し Cに実装されています。

from line_profiler import LineProfiler
import random

def do_stuff(numbers):
    s = sum(numbers)
    l = [numbers[i]/43 for i in range(len(numbers))]
    m = ['hello'+str(numbers[i]) for i in range(len(numbers))]

numbers = [random.randint(1,100) for i in range(1000)]
lp = LineProfiler()
lp_wrapper = lp(do_stuff)
lp_wrapper(numbers)
lp.print_stats()

結果は次のようになります。

Timer unit: 1e-06 s

Total time: 0.000649 s
File: <ipython-input-2-2e060b054fea>
Function: do_stuff at line 4

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
     4                                           def do_stuff(numbers):
     5         1           10     10.0      1.5      s = sum(numbers)
     6         1          186    186.0     28.7      l = [numbers[i]/43 for i in range(len(numbers))]
     7         1          453    453.0     69.8      m = ['hello'+str(numbers[i]) for i in range(len(numbers))]

5

コード実行の一部を計るのに非常に単純な関数を使用しました:

import time
def timing():
    start_time = time.time()
    return lambda x: print("[{:.2f}s] {}".format(time.time() - start_time, x))

そしてそれを使用するには、関数のタイミングを取得するために測定するコードの前にそれを呼び出し、次にコメント付きのコードの後に​​関数を呼び出します。時間はコメントの前に表示されます。例えば:

t = timing()
train = pd.read_csv('train.csv',
                        dtype={
                            'id': str,
                            'vendor_id': str,
                            'pickup_datetime': str,
                            'dropoff_datetime': str,
                            'passenger_count': int,
                            'pickup_longitude': np.float64,
                            'pickup_latitude': np.float64,
                            'dropoff_longitude': np.float64,
                            'dropoff_latitude': np.float64,
                            'store_and_fwd_flag': str,
                            'trip_duration': int,
                        },
                        parse_dates = ['pickup_datetime', 'dropoff_datetime'],
                   )
t("Loaded {} rows data from 'train'".format(len(train)))

その後、出力は次のようになります。

[9.35s] Loaded 1458644 rows data from 'train'

5

多くの場所で同じ問題を抱えていたため、便利なパッケージを作成しましたhorology。あなたはそれをインストールしてpip install horology、エレガントな方法でそれを行うことができます:

from horology import Timing

with Timing(name='Important calculations: '):
    prepare()
    do_your_stuff()
    finish_sth()

出力されます:

Important calculations: 12.43 ms

または、もっと簡単です(1つの関数がある場合)。

from horology import timed

@timed
def main():
    ...

出力されます:

main: 7.12 h

単位と丸めを処理します。Python 3.6以降で動作します。


より多くのドキュメントやソースを確認し@DarrenZou こちら
ハンス・

変数でその値を取得できますか?
PepeElMago33

はい、使用しますmain.interval
ハンス・

3

これは私にとって有効なポール・マクガイアの答えです。誰かがその問題を実行するのに問題があった場合に備えて。

import atexit
from time import clock

def reduce(function, iterable, initializer=None):
    it = iter(iterable)
    if initializer is None:
        value = next(it)
    else:
        value = initializer
    for element in it:
        value = function(value, element)
    return value

def secondsToStr(t):
    return "%d:%02d:%02d.%03d" % \
        reduce(lambda ll,b : divmod(ll[0],b) + ll[1:],
            [(t*1000,),1000,60,60])

line = "="*40
def log(s, elapsed=None):
    print (line)
    print (secondsToStr(clock()), '-', s)
    if elapsed:
        print ("Elapsed time:", elapsed)
    print (line)

def endlog():
    end = clock()
    elapsed = end-start
    log("End Program", secondsToStr(elapsed))

def now():
    return secondsToStr(clock())

def main():
    start = clock()
    atexit.register(endlog)
    log("Start Program")

timing.main()ファイルをインポートした後、プログラムから呼び出します。


3

Timeitは、小さなコードブロックの実行時間を計算するために使用されるPythonのクラスです。

Default_timerはこのクラスのメソッドで、CPU実行時間ではなく、実時間のタイミングを測定するために使用されます。したがって、他のプロセスの実行がこれを妨害する可能性があります。したがって、コードの小さなブロックに役立ちます。

コードのサンプルは次のとおりです。

from timeit import default_timer as timer

start= timer()

# Some logic

end = timer()

print("Time taken:", end-start)

timeit多くの場合、IMOはより良い回答です。
マルク・

3

後で答えますが、私は使用しますtimeit

import timeit
code_to_test = """
a = range(100000)
b = []
for i in a:
    b.append(i*2)
"""
elapsed_time = timeit.timeit(code_to_test, number=500)
print(elapsed_time)
# 10.159821493085474

  • インポートを含め、すべてのコードを内にラップしますcode_to_test
  • number 引数は、コードを繰り返す回数を指定します。
  • デモ

また、文字列に入れることができないコードの一部の時間を計測したい場合はどうでしょうか?
DanielStracaboško

@daniel新しい質問を作成できます。ここにリンクを投稿していただけると、お手伝いできるかもしれません。
CONvid19

2

Pythonプログラムの実行時間の測定は、次の条件に応じて一貫性がない場合があります。

  • 同じプログラムを異なるアルゴリズムを使用して評価できます
  • 実行時間はアルゴリズムによって異なります
  • 実行時間は実装によって異なります
  • 実行時間はコンピュータによって異なります
  • 小さな入力に基づいて実行時間を予測することはできません

これは、最も効果的な方法は「成長の順序」を使用して、ビッグ「O」表記を学習して適切に実行することです。

とにかく、この単純なアルゴリズムを使用して、特定のマシンカウント/秒で任意のPythonプログラムのパフォーマンスを評価することができます。 これを、評価するプログラムに適合させます

import time

now = time.time()
future = now + 10
step = 4 # Why 4 steps? Because until here already four operations executed
while time.time() < future:
    step += 3 # Why 3 again? Because a while loop executes one comparison and one plus equal statement
step += 4 # Why 3 more? Because one comparison starting while when time is over plus the final assignment of step + 1 and print statement
print(str(int(step / 10)) + " steps per second")

2

これは単にPythonで行います。複雑にする必要はありません。

import time

start = time.localtime()
end = time.localtime()
"""Total execution time in seconds$ """
print(end.tm_sec - start.tm_sec)

2

@rogeriopvlからの応答と同様に、長時間実行するジョブに対して同じライブラリを使用して、時間を秒に変換するように少し変更を加えました。

import time
start_time = time.time()
main()
seconds = time.time() - start_time
print('Time Taken:', time.strftime("%H:%M:%S",time.gmtime(seconds)))

出力例

Time Taken: 00:00:08

2

まず、管理者としてコマンドプロンプト(CMD)を開いて人に優しいパッケージをインストールし、そこに入力します- pip install humanfriendly

コード:

from humanfriendly import format_timespan
import time
begin_time = time.time()
# Put your code here
end_time = time.time() - begin_time
print("Total execution time: ", format_timespan(end_time))

出力:

ここに画像の説明を入力してください


1

metakermitの Python 2.7用の最新の回答を使用するには、単調なパッケージが必要です。

コードは次のようになります。

from datetime import timedelta
from monotonic import monotonic

start_time = monotonic()
end_time = monotonic()
print(timedelta(seconds=end_time - start_time))

1

以下のスクリプトを使って時差を試してみました。

import time

start_time = time.perf_counter()
[main code here]
print (time.perf_counter() - start_time, "seconds")

0

時間をマイクロ秒単位で測定したい場合は、Paul McGuireNicojoの回答に完全に基づいた次のバージョンを使用できます。これはPython 3コードです。それに色も追加しました:

import atexit
from time import time
from datetime import timedelta, datetime


def seconds_to_str(elapsed=None):
    if elapsed is None:
        return datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")
    else:
        return str(timedelta(seconds=elapsed))


def log(txt, elapsed=None):
    colour_cyan = '\033[36m'
    colour_reset = '\033[0;0;39m'
    colour_red = '\033[31m'
    print('\n ' + colour_cyan + '  [TIMING]> [' + seconds_to_str() + '] ----> ' + txt + '\n' + colour_reset)
    if elapsed:
        print("\n " + colour_red + " [TIMING]> Elapsed time ==> " + elapsed + "\n" + colour_reset)


def end_log():
    end = time()
    elapsed = end-start
    log("End Program", seconds_to_str(elapsed))


start = time()
atexit.register(end_log)
log("Start Program")

log()=>タイミング情報を出力する関数。

txt ==>ログの最初の引数、およびタイミングをマークする文字列。

atexit ==>プログラムの終了時に呼び出すことができる関数を登録するPythonモジュール。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.