cProfileとpstats(ボトルネックの調査)
「実行経過のデータをファイルに出力 → データを読める形に出力」という手順で測定します。
実行経過のデータをファイルに出力するには、cProfileを使います。
#encoding:shift-jis # import profile # pure Pythonで書かれた profile モジュール import cProfile as profile # 普通はCで書かれたcProfileを使うべき # import hotshot # hotshotはPython 3.xでは廃止された。 import spammodule code_to_be_profiled = """ # 測定したいPythonコード # profileには関数ではなく文字列を渡す for i in xrange(10): spammodule.eggfunction('kfm.sff') """ profile.run(code_to_be_profiled, "mugen.stats")
データを読める形に出力するには、pstatsを使います。
#encoding:shift-jis import pstats stats = pstats.Stats("sffopen.stats") stats.strip_dirs() stats.sort_stats('time', 'calls') stats.print_stats(30)
timeit(コード片の時間測定)
timeitを使います。
#encoding:shift-jis import timeit from functools import partial import spammodule # timeit.timeitに、呼び出し可能な物を渡す。 # 文字列も渡せるが割愛 # 引数が無い関数はそのまま渡す。 t = timeit.timeit( spammodule.hamfunction, number=100 ) print("hamfunction :", t) # 引数がある関数は、functools.partialを渡す。 t = timeit.timeit( partial(spammodule.eggfunction, "some-arg", some_kw_arg="value"), number=100 ) print("eggfunction :", t) #timeit.Timerを使うことも出来る。 timer = timeit.Timer(spammodule.hamfunction) print("hamfunction :", timer.timeit(number=100))