我正在用Python编写一个迭代大量数据的测试 使用外部库对每个函数执行一个函数。每个 循环,它有时也需要以某种方式解码和破坏数据。现在 基准测试不是主要的优先事项,但我希望它能够衡量一些基本的 统计数据,如实际测试的差异和由此引起的开销 破坏(如果失控)。
包括an SO answer在内的大多数来源似乎建议使用timeit模块, 但他们中的大多数似乎都在讨论简单代码片段的基准测试。也 正如答案所指出的那样,time.clock()似乎值得推荐。
但是我没有找到两者的实际速度之间的比较 调用。所以我一直在尝试time.time和time.clock来寻找 哪一个更快,更令人惊讶的是time.time()似乎是赢家。
此代码(借用“The Optimization anecdote”):
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位数。
但是时间(),即使它不那么精确,它总是快5倍左右。
那么为什么clock()是首选?这在很大程度上取决于架构 和操作系统?或者我错过了什么,我的结果不正确?
上面的代码在Debian Wheezy amd64和Python 2.7上运行。我试过了 使用在OpenVZ中运行的Python 2.6挤压amd64,结果是 大致相同。