2

我希望使用 Python 作为一个系统来对其他进程的时间、数据 I/O、正确性等进行基准测试。我真正感兴趣的是时间的准确性。例如

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

子进程是否会给被调用的函数增加相当大的开销。

编辑

好吧,经过几次快速测试后,似乎我最好的选择是使用,subprocess但是我已经注意到包含 stdout/stderr 和通信调用,它增加0.002338 s了执行的额外时间。

4

2 回答 2

0

使用时间

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 回答
0

如果您的计时器脚本不关心它计时的程序的标准输出/标准错误,只需将输出通过管道传输到文件或 /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,这增加了开销。

于 2013-02-16T17:56:16.603 回答