profile
リンク先のドキュメントから:
注意: プロファイラー モジュールは、ベンチマーク目的ではなく、特定のプログラムの実行プロファイルを提供するように設計されています (そのためtimeit
、かなり正確な結果が得られます)。これは、C コードに対する Python コードのベンチマークに特に当てはまります。プロファイラーは Python コードのオーバーヘッドを導入しますが、C レベル関数のオーバーヘッドを導入しないため、C コードはどの Python コードよりも高速に見えます。
いいえ、profile
コードのベンチマークに使用したくありません。profile
使用したいのは、コードが遅すぎる理由を理解することです。
また、関数呼び出しの前後にタイムスタンプを出力したくない場合もあります。注意しないと、そのように間違ってしまう可能性があることがあまりにも多くあります (間違ったタイムスタンプ関数を使用したり、GC にテスト実行の途中でサイクル コレクションを実行させたり、ループ タイミングのテスト オーバーヘッドを含めたりするなど)。 .)、timeit
そのすべてを処理します。
このようなものは、物事をベンチマークする一般的な方法です。
for impl in 'mycode', 'googlecode', 'thriftcode':
t = timeit.timeit('serialize(data)',
setup='''from {} import serialize;
with open('data.txt') as f: data=f.read()
'''.format(impl),
number=10000)
print('{}: {}'.format(impl, t)
(ここでは、3 つの異なるシリアライゼーション ツールを同じ API にラップする 3 つのモジュールを記述できると想定しています。単一のserialize
関数は、文字列を受け取り、それを使用して何らかの処理を行います。明らかに、物事を整理する方法はさまざまです。)