Python(25)実行時間を計測する方法

ラベル:

前の関連記事:Python(24)preorder(行きかけ順)inorder(通りがけ順)postorder(帰りがけ順)の比較


LibreOffice(57)SDKからメソッドの解説を抽出するでとても時間のかかるプログラムを作ったので時間の計測をしてみることにしました。

2行を書き換えるだけでtimeitで簡単測定


Pythonコードの時間を測定するモジュールが標準に提供されています。

27.5. timeit — 小さなコード断片の実行時間計測 — Python 3.3.5 ドキュメント
def test():
    L = [i for i in range(100)]
if __name__ == '__main__':
    import timeit
    print(timeit.timeit("test()", setup="from __main__ import test"))
この例を実行してみると結構時間がかかった後に6.546283136650221と出力されます。

実際にかかった時間と比較すると単位は秒のようです。

たった6秒強で「結構時間がかかった」と私は思ったわけですが、、、

計測している関数test()は0から99までのリストを生成しているだけなのでそんなに時間がかからないはずです。

おかしいな、と思ったらデフォルトでは1000000回繰り返し実行した結果が表示されていました。
def test():
    L = [i for i in range(100)]
if __name__ == '__main__':
    import timeit
    print(timeit.timeit("test()", setup="from __main__ import test", number=1))
これで1回分だけの実行時間が計測されました。

結果は1.3957891504488283e-05秒でした。

timeitメソッドの引数setupを省略するとNameError: global name 'test' is not definedと言われます。
if __name__ == '__main__':
    import timeit
    print(timeit.timeit("print('test')", number=1))
これはエラーがでません。

ということで自分で作った関数を実行するときはsetupでインポートしないといけないようです。

LibreOffice(57)SDKからメソッドの解説を抽出するで作った関数libreoffice57()を計測してみます。
if __name__ == "__main__":
    libreoffice57()
この関数呼び出し部分を以下のように書き換えるだけです。
if __name__ == "__main__":
    import timeit
    print(timeit.timeit("libreoffice57()", setup="from __main__ import libreoffice57", number=1))
python25.py (LibreOffice4.2 SDKをインストールした状態でないと実行できない関数を測定しています。)

結果は3.804309540054633秒でした。

実感よりだいぶ短く感じますが、ストップウォッチを手に持って測定した時間と大体同じでした、、、単に私がせっかちなだけのようです。

timeitのままデバッグするとエラーがでるときがあるので、そのときは実行時間の計測部分ははずします。

参考にしたサイト


27.5. timeit — 小さなコード断片の実行時間計測 — Python 3.3.5 ドキュメント
2行を書き換えるだけで簡単に関数の実行時間を測定できました。
PR

0 件のコメント:

コメントを投稿