[解決済み] Pythonスクリプトのベンチマークを行う簡単な方法はありますか?
質問
通常、私はシェルコマンドを使用します。
time
. 私の目的は、データが小、中、大、超大のセットで、どれくらいの時間とメモリ使用量になるかをテストすることです。
LinuxまたはPythonでこれを行うためのツールはありますか?
どのように解決するのですか?
をご覧ください。
時間
,
Python プロファイラ
そして
パイカルグラフ
. また、次のページもご覧ください。
のコメントです。
nikicc
を言及する "
スネークビズ
"です。プロファイリングデータをまたひとつ視覚化することができ、参考になります。
時刻表示
def test():
"""Stupid test function"""
lst = []
for i in range(100):
lst.append(i)
if __name__ == '__main__':
import timeit
print(timeit.timeit("test()", setup="from __main__ import test"))
# For Python>=3.5 one can also write:
print(timeit.timeit("test()", globals=locals()))
基本的には、pythonのコードを文字列のパラメータとして渡すと、指定した回数で実行され、実行時間が表示されます。からの重要なビットは ドキュメント :
timeit.timeit(stmt='pass', setup='pass', timer=<default timer>, number=1000000, globals=None)
を作成します。Timer
のインスタンスを指定します。 設定 コードと タイマー 関数を実行し、そのtimeit
メソッドを 数 を実行します。オプションの グローバル 引数は、コードを実行する名前空間を指定します。
...そして
Timer.timeit(number=1000000)
時間 番号 mainステートメントの実行。 これは setup を実行します。 文の実行にかかる時間を返します。 ステートメントを何度も実行し、その回数を秒単位で float で表します。 引数はループの回数で、デフォルトは1回です。 百万円です。 メインステートメント、Setupステートメント、タイマ関数 がコンストラクタに渡されます。注意 デフォルトでは
timeit
を一時的にオフにします。garbage collection
のタイミングになります。 この方法の利点は 独立したタイミングをより比較しやすくすることができます。 このデメリットは GCが性能の重要な要素である可能性があること。 関数が測定されます。 もしそうであれば、GCを再度有効にするのは、最初の ステートメントで 設定 の文字列を使用します。 例えば
timeit.Timer('for i in xrange(10): oct(i)', 'gc.enable()').timeit()
プロファイリング
プロファイリングを行うことで だいぶ をより詳細に把握することができます。以下は、"インスタント例"です。 公式ドキュメント :
import cProfile
import re
cProfile.run('re.compile("foo|bar")')
を与えることになる。
197 function calls (192 primitive calls) in 0.002 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.001 0.001 <string>:1(<module>)
1 0.000 0.000 0.001 0.001 re.py:212(compile)
1 0.000 0.000 0.001 0.001 re.py:268(_compile)
1 0.000 0.000 0.000 0.000 sre_compile.py:172(_compile_charset)
1 0.000 0.000 0.000 0.000 sre_compile.py:201(_optimize_charset)
4 0.000 0.000 0.000 0.000 sre_compile.py:25(_identityfunction)
3/1 0.000 0.000 0.000 0.000 sre_compile.py:33(_compile)
この2つのモジュールは、ボトルネックを探すためのヒントを与えてくれるはずです。
また、出力された内容を把握するために
profile
をご覧ください。
この記事
パイカルグラフ
ノート pycallgraphは公式に放棄されました。 2018年2月以降 . 2020年12月時点ではまだPython 3.6で動作していましたが。PythonがプロファイリングAPIを公開する方法にコアな変更がない限り、それは有用なツールであり続けるはずですが。
本モジュール は、graphvizを使用して、以下のようなコールグラフを作成します。
どのパスが最も時間を使ったかを色で簡単に確認することができます。pycallgraph APIを使用して作成するか、パッケージ化されたスクリプトを使用することができます。
pycallgraph graphviz -- ./mypythonscript.py
しかし、そのオーバーヘッドは相当なものです。そのため、すでに長時間稼働しているプロセスでは、グラフの作成に時間がかかることがあります。
関連
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
[解決済み】RuntimeWarning: invalid value encountered in double_scalars で numpy の除算ができない。
-
[解決済み】DataFrameのコンストラクタが正しく呼び出されない!エラー
-
[解決済み】TypeError: 系列を <class 'float'> に変換することができません。
-
[解決済み] AndroidでPythonを実行する方法はありますか?
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] 最近のPythonでカスタム例外を宣言する適切な方法?
-
[解決済み] 特定のファイル/フォルダを除外してディレクトリをtarするシェルコマンド
-
[解決済み] 2次元アレイにおけるピーク検出
-
[解決済み] OS X:Linuxのwgetに相当するもの
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python機械学習Githubが8.9Kstarsに達したモデルインタープリタLIME
-
PythonはWordの読み書きの変更操作を実装している
-
Pythonショートビデオクローラーチュートリアル
-
PythonでECDSAを実装する方法 知っていますか?
-
[解決済み】csv.Error:イテレータはバイトではなく文字列を返すべき
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?
-
[解決済み】ValueError: xとyは同じサイズでなければならない
-
[解決済み] 環境変数の値にアクセスする方法
-
[解決済み] Pythonスクリプトのプロファイリングはどのように行うのですか?