为什么相同的 Python 代码有不同的时钟时间?



我使用以下python代码对我的服务器进行基准测试:

import time
initial_clock = time.clock()
res = 0
for i in range(1, 10000000):
res += i * i
print (time.clock() - initial_clock)

当我多次运行它时,我得到不同的执行时间,从2.163377秒到2.970836秒不等。 我知道由于 CPU 负载的变化,相同的代码可能具有不同的执行时间,但正如time.clock文档中所说,它只考虑当前的进程时钟,因此即使使用time.time()也应该使用time.clock()具有相同的执行时间。不应该吗?

还有没有无论如何我可以得到一段 python 代码的确切clock计数?

编辑:我使用time.process_time()并获得相同的结果。

计时代码的第一条规则:使用timeit模块。这负责自动为您的操作系统选择最佳计时器,最大限度地减少其他影响,并多次计时运行以为您提供最准确的估计所花费的时间。

接下来,time.clock()不是特定于流程的。是的,这是 CPU 上的时钟时间,但不是当前进程使用 CPU 所花费的时间。计划在 CPU 上运行的其他进程会增加所花费时间的波动。您希望改用time.process_time()

但是,所有代码都受到潜在的缓存和特定于 Python 的定期进程(例如垃圾回收器运行(的影响。你不能指望得到可重复的time.clock()time.process_time()值,因为那个时钟无法解释Python进程本身中的这种后台工作。您可以在计时代码时禁用垃圾收集器进程(timeit为您执行此操作(,但这对内部缓存(特定于实现且大多数未记录(没有帮助。

timeit使用time.perf_counter()来包括花费在 I/O 和其他进程上的时间,这些进程可能由待测试的代码启动。您可以通过在将timeit用作命令行脚本时使用-p开关或在调用 API 函数时传递timer=time.process_time来告诉它改用time.process_time()

最新更新