time.time vs. timeit.timeit

时间:2013-07-10 19:31:25

标签: python performance time python-3.x

有时候,我喜欢花时间运行部分代码。我已经检查了很多在线网站,并且已经看到了两种主要方法。一个使用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更快,有时速度更慢。哪种方式更好(更准确)?

2 个答案:

答案 0 :(得分:47)

timeit更准确,原因有三:

  • 它会多次重复测试,以消除其他任务对您的计算机的影响,例如磁盘刷新和操作系统调度。
  • 它会禁用垃圾收集器,以防止该进程通过在不合适的时刻安排集合运行来扭曲结果。
  • 为您的操作系统选择最准确的计时器,在Python 2中选择time.timetime.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.timetime.clock相比,它更准确,更可靠,因为它考虑了造成代码执行和试验之间差异的因素,只需重复执行测试即可产生更可靠和准确的结果。+

相关问题