161

Pythonスクリプトに次のコードがあります。

def fun(): 
  #Code here

fun()

このスクリプトを実行し、実行にかかった時間を分単位で調べたいと考えています。このスクリプトの実行にかかった時間を調べるにはどうすればよいですか? 例をいただければ幸いです。

4

9 に答える 9

293
from datetime import datetime
startTime = datetime.now()

#do something

#Python 2: 
print datetime.now() - startTime 

#Python 3: 
print(datetime.now() - startTime)
于 2011-07-22T07:38:36.230 に答える
149

Linux または UNIX のコマンド ラインからスクリプトを実行しますか? その場合、あなたはただ使うことができます

time ./script.py
于 2011-07-22T07:38:44.167 に答える
76
import time
start = time.time()

fun()

# python 2
print 'It took', time.time()-start, 'seconds.'

# python 3
print('It took', time.time()-start, 'seconds.')
于 2011-07-22T15:02:59.647 に答える
17

私が通常行うことは、clock()またはライブラリtime()から使用することです。通訳者の時間を測定し、システム時間を測定します。その他の注意事項はdocsにあります。timeclocktime

例えば、

def fn():
    st = time()
    dostuff()
    print 'fn took %.2f seconds' % (time() - st)

または、 を使用することもできますtimeittime私はそれをどれだけ速く打ち出せるかという理由でこのアプローチをよく使用しますが、分離可能なコード部分のタイミングを計っている場合timeitは便利です。

timeit docsから、

def test():
    "Stupid test function"
    L = []
    for i in range(100):
        L.append(i)

if __name__=='__main__':
    from timeit import Timer
    t = Timer("test()", "from __main__ import test")
    print t.timeit()

その後、分に変換するには、単純に 60 で割ることができます。スクリプトのランタイムを読みやすい形式 (秒であろうと日であろうと) にしたい場合は、次のように atimedeltaに変換できますstr

runtime = time() - st
print 'runtime:', timedelta(seconds=runtime)

そして、それはフォームの何かを出力します[D day[s], ][H]H:MM:SS[.UUUUUU]. timedelta docsを確認できます。

最後に、コードのプロファイリングが実際に必要な場合、Python はプロファイル ライブラリも利用できるようにします。

于 2011-07-22T08:49:25.970 に答える
16
import time 

startTime = time.time()
# Your code here !
print ('The script took {0} second !'.format(time.time() - startTime))

前のコードは問題なく動作します。

于 2016-01-12T12:00:10.020 に答える
10

timeit モジュールを使用します。それは非常に簡単です。example.py ファイルを実行して Python シェルでアクティブにすると、シェルで関数を呼び出せるようになります。試してみて、動作することを確認してください

>>>fun(input)
output

うまくいきました。今度は timeit をインポートしてタイマーを設定します

>>>import timeit
>>>t = timeit.Timer('example.fun(input)','import example')
>>>

これでタイマーが設定され、所要時間を確認できます

>>>t.timeit(number=1)
some number here

そして、その関数の実行にかかった秒数 (またはそれ以下) が表示されます。単純な関数の場合は、t.timeit(number=1000) (または任意の数!) に増やしてから、答えをその数で割って平均を求めることができます。

これが役立つことを願っています。

于 2012-11-16T14:37:05.167 に答える