2

他のプロセスの時間、データ I/O、正確性などをベンチマークするシステムとして Python を使用することを検討しています。私が本当に興味を持っているのは、時間の精度です。例えば

start = time()
subprocess.call('md5sum', somelist)
end = time()
print("%d s", end-start)

サブプロセスは、呼び出される関数にかなりのオーバーヘッドを追加しますか?

編集

いくつかの簡単なテストの後、私の最良のオプションは使用することですsubprocessが、通信呼び出しに stdout/stderr を含めることで0.002338 s、実行に余分な時間が追加されることに注意しました。

4

2 に答える 2

0

タイマー スクリプトが時間を計測するプログラムの stdout/stderr を気にしない場合は、出力をファイルまたは /dev/null にパイプするだけです。これにより、ストリームを読み取って Python 文字列に変換するオーバーヘッドが回避されます。

start = time()
subprocess.call(['md5sum'] + some_list, stdout=open('/dev/null', 'w'),
    stderr=subprocess.STDOUT)
delta = time.time() - start

stdout と stderr を別々のストリームとして読み取る必要がない場合は、communicate() を避けてください。stderr を読み取るために 2 番目のスレッドが生成され、オーバーヘッドが増加します。

于 2013-02-16T17:56:16.603 に答える
0

timeitを使用する

import timeit
timeit.timeit('yourfunction')

アップデート

Linux を使用している場合は、次timeのようにコマンドを使用できます。

import subprocess
result = subprocess.Popen(['time', 'md5sum', somelist], shell = False, stdout = subprocess.PIPE, stderr = subprocess.PIPE).communicate()
print result
于 2013-02-16T01:10:19.653 に答える