我想比较两个代码片段的执行时间,看看哪一个更快。所以,我需要一个精确的方法来测量我的python代码片段的执行时间。
我已经尝试使用time.time()
,time.process_time()
,time.perf_counter_ns()
以及timeit.timeit()
,但我面临着同样的问题。也就是说:当我使用上述任何方法来测量同一代码段的执行时间时,每次运行它都会返回不同的值。这种差异在某种程度上是显著的,以至于我无法可靠地使用它们来比较两个代码段在执行时间上的差异。
作为一个例子,我在我的google colab中运行以下代码:
import time
t1 = time.perf_counter()
sample_list = []
for i in range(1000000):
sample_list.append(i)
t2 = time.perf_counter()
print(t2 - t1)
我运行以上代码10次,结果的变化约为50%(最小值= 0.14,最大值= 0.28)。
替代品吗?
给定代码段的执行时间每次运行时几乎总是不同的。大多数可用于分析单个函数/代码片段的工具都会考虑到这一点,并多次运行代码以提供平均执行时间。这样做的原因是在您的计算机上运行着其他进程,并且资源并不总是以相同的方式分配,因此不可能控制每个变量以使每次运行获得相同的执行时间。
分析一个给定函数或一小段代码的最简单的方法之一是使用%timeit
"magic"命令。例子:
>>> %timeit 1 + 1
8.41 ns ± 0.0181 ns per loop (mean ± std. dev. of 7 runs, 100,000,000 loops each)
如果您使用%%timeit
而不是%timeit
,它还允许您输入多行代码块来计时。
timeit库可以独立使用,但通常更容易在交互式python会话中使用。
额外的资源:
- 如何配置我的代码? Python中的%timeit是什么?
- 我怎么能时间代码段测试性能与python timeit?