为什么相同的 python 代码有不同的时钟时间?
why same python code has different clock time?
我正在使用以下 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.clock()
应该具有相同的执行时间即使使用 time.time()
不同。不应该?
另外,我是否可以得到 clock
一段 python 代码的精确计数?
编辑:我使用 time.process_time()
并得到相同的结果。
计时码第一条规则:使用timeit
module。这会自动为您的 OS 选择最佳计时器,最大限度地减少其他影响,并需要多次计时 运行 才能为您提供最准确的时间估计。
其次,time.clock()
不是特定于进程的。这是 CPU 上的时钟时间,是的,但不是当前进程使用 CPU 花费的时间。在 CPU 上安排到 运行 的其他进程将增加所用时间的波动。您想改用 time.process_time()
。
但是,所有代码都受制于潜在的缓存和 Python 特定的周期性进程,例如 garbage collector 运行ning。您不能期望获得可重复的 time.clock()
或 time.process_time()
值,因为该时钟无法解释 Python 进程本身中的此类后台工作。您可以在计时代码时禁用垃圾收集器进程(timeit
为您执行此操作),但这对内部缓存没有帮助(它们是特定于实现的,大多数未记录)。
timeit
使用 time.perf_counter()
来包括花费在 I/O 和其他可能被测试代码启动的进程上的时间。您可以在使用 timeit
作为命令行脚本时使用 -p
开关,或者在调用 API 函数时传递 timer=time.process_time
来告诉它使用 time.process_time()
。
我正在使用以下 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.clock()
应该具有相同的执行时间即使使用 time.time()
不同。不应该?
另外,我是否可以得到 clock
一段 python 代码的精确计数?
编辑:我使用 time.process_time()
并得到相同的结果。
计时码第一条规则:使用timeit
module。这会自动为您的 OS 选择最佳计时器,最大限度地减少其他影响,并需要多次计时 运行 才能为您提供最准确的时间估计。
其次,time.clock()
不是特定于进程的。这是 CPU 上的时钟时间,是的,但不是当前进程使用 CPU 花费的时间。在 CPU 上安排到 运行 的其他进程将增加所用时间的波动。您想改用 time.process_time()
。
但是,所有代码都受制于潜在的缓存和 Python 特定的周期性进程,例如 garbage collector 运行ning。您不能期望获得可重复的 time.clock()
或 time.process_time()
值,因为该时钟无法解释 Python 进程本身中的此类后台工作。您可以在计时代码时禁用垃圾收集器进程(timeit
为您执行此操作),但这对内部缓存没有帮助(它们是特定于实现的,大多数未记录)。
timeit
使用 time.perf_counter()
来包括花费在 I/O 和其他可能被测试代码启动的进程上的时间。您可以在使用 timeit
作为命令行脚本时使用 -p
开关,或者在调用 API 函数时传递 timer=time.process_time
来告诉它使用 time.process_time()
。