54

有时,我喜欢计算我的部分代码运行需要多长时间。我检查了很多在线网站,并且看到了两种主要的方法来做到这一点。一个正在使用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 更快,有时更慢。哪种方法更好(更准确)?

4

2 回答 2

80

timeit更准确,原因有以下三个:

  • 它会多次重复测试,以消除其他任务对您机器的影响,例如磁盘刷新和操作系统调度。
  • 它禁用垃圾收集器,以防止该进程通过在不合时宜的时刻安排收集运行来扭曲结果。
  • time.time它会为您的操作系统或time.clockPython 2 和Python 3选择最准确的计时器time.perf_counter()。请参阅timeit.default_timer.
于 2013-07-10T19:38:27.537 回答
3

在任何给定时间,中央处理单元 (CPU) 都被许多进程使用和共享。使用的测量值time.time与我们所说的挂钟有关。这意味着结果取决于执行测试时正在运行的其他进程。因此,在许多情况下,所产生的结果time.time并不是尽可能准确。

time.clock使用Python 2.x 和 time.process_time()/或Python 3.X可以生成更可靠的结果time.perf_counter(),它测量代码执行期间使用的 CPU 周期,但即使是这种方法,因为它严重依赖于执行测试的特定机器。例如,如果测试在不同的机器上执行,结果可能会有很大的不同(即使算法和输入数据完全相同)


timeit.timeit是一个先进的库,与它相比更加准确和可靠time.timetime.clock因为它考虑了在代码执行和试验之间造成差异的因素,只需重复执行测试即可产生更可靠和准确的结果。+

于 2020-05-03T15:29:59.930 回答