有时候,我喜欢花时间运行部分代码。我已经检查了很多在线网站,并且已经看到了两种主要方法。一个使用time.time
,另一个使用timeit.timeit
。
所以,我写了一个非常简单的脚本来比较两者:
from timeit import timeit
from time import time
start = time()
for i in range(100): print('ABC')
print(time()-start, timeit("for i in range(100): print('ABC')", number=1))
基本上,它计算在for循环中打印“ABC”100次所需的时间。左侧的数字是time.time
的结果,右侧的数字是timeit.timeit
的结果:
# First run
0.0 0.012654680972022981
# Second run
0.031000137329101562 0.012747430190149865
# Another run
0.0 0.011262325239660349
# Another run
0.016000032424926758 0.012740166697164025
# Another run
0.016000032424926758 0.0440628627381413
正如您所看到的,有时候,time.time更快,有时速度更慢。哪种方式更好(更准确)?
答案 0 :(得分:47)
timeit
更准确,原因有三:
time.time
或time.clock
,在Python 3上选择time.perf_counter()
。请参阅timeit.default_timer
。答案 1 :(得分:1)
在任何给定时间,许多进程都使用并共享中央处理器(CPU)。使用time.time
进行的测量与我们所说的壁钟有关。这意味着结果取决于执行测试时正在运行的其他进程。因此,在许多情况下,time.time
产生的结果不太准确。
对于Python 2.x,可以使用time.clock
,对于Python 3.X,可以使用time.process_time()
或time.perf_counter()
来生成更可靠的结果,它可以测量代码执行期间使用的CPU周期但是,即使这种方法在很大程度上也取决于您要执行测试的特定计算机。例如,如果测试是在不同的机器上执行的,则结果可能会有很大的不同(即使算法和输入数据都完全相同)
timeit.timeit
是一个高级库,与time.time
和time.clock
相比,它更准确,更可靠,因为它考虑了造成代码执行和试验之间差异的因素,只需重复执行测试即可产生更可靠和准确的结果。+