我正在用 Python 编写一个测试,它迭代大量数据并使用外部库对每个数据执行一个函数。在每个循环中,有时还需要以某种方式解码和破坏数据。现在基准测试不是主要优先事项,但我希望它测量一些基本统计数据,例如实际测试中的差异以及由重整造成的开销(以防失控)。
包括SO 答案在内的大多数来源似乎都建议使用 timeit 模块,但其中大多数似乎都在谈论对简单代码片段进行基准测试。同样正如答案所指出的那样,似乎建议使用 time.clock() 。
但是我还没有找到两个调用的实际速度之间的比较。所以我一直在尝试使用 time.time 和 time.clock 来找出哪个更快,并且令人惊讶的是 time.time() 似乎是赢家。
这段代码(借自“优化轶事”):
import time
def timing0(f, n):
print f.__name__,
r = range(n)
t1 = time.clock()
for i in r:
f(); f(); f(); f(); f()
f(); f(); f(); f(); f()
t2 = time.clock()
print t2-t1
timing0(time.clock, 1000000)
timing0(time.time, 1000000)
几乎不断地输出这样的数字:
me@here:~$ ./timing_time
clock 2.47
time 0.47
me@here:~$
唯一的区别是 time() 更精确:当我使用 time() 进行测量时,我在小数点后得到大约 11 位数字。
但是 time(),即使它不那么精确,它也总是快 5 倍左右。
那么为什么首选时钟()?这在很大程度上取决于架构和操作系统吗?还是我遗漏了什么并且我的结果不正确?
上面的代码在 Debian Wheezy amd64 和 Python 2.7 上运行。我在 OpenVZ 中运行 Python 2.6 在 Squeeze amd64 上进行了尝试,结果大致相同。