为什么在Mac OS X上Python的time.time()和time.clock()会有差异?

4

我正在运行Mac OS X 10.8,使用time.clock()计时代码时遇到了奇怪的问题,有些在线资源建议我优先使用它而不是time.time()。例如:

import time    
t0clock = time.clock()
t0time = time.time()
time.sleep(5)
t1clock = time.clock()
t1time = time.time()
print t1clock - t0clock
print t1time - t0time

0.00330099999999 <-- from time.clock(), clearly incorrect
5.00392889977    <-- from time.time(), correct

为什么会发生这种情况?我是否应该只使用time.time()来进行可靠的估计?
3个回答

7
time.clock文档中得知:
在Unix上,返回的当前处理器时间为浮点数,以秒为单位表示。 精度,实际上是“处理器时间”含义的定义,取决于与C函数相同名称的函数,但无论如何,这是用于基准测试Python或时间算法的函数。
time.time文档中得知:
返回自时代以来的秒数作为浮点数。请注意,即使时间总是作为浮点数返回,但并非所有系统都提供比1秒更好的精度。虽然此函数通常返回非递减值,但如果系统时钟在两次调用之间被设置回,则它可能会返回低于先前调用的值。 time.time()测量秒数,time.clock()测量当前进程使用的CPU时间。 但是,在Windows上,这是不同的,因为clock()还测量秒数。 这里有一个类似的问题

理解 Python 的某些部分(特别是日期/时间函数),它们只是围绕着操作系统中存在的“传统”调用的薄包装器。而这些调用因平台而异... - andrew cooke

7

不要使用time.timetime.clock,而是使用timeit.default_timer。当sys.platform == "win32"时,它将返回time.clock,对于所有其他平台,它将返回time.time

这样,您的代码将独立于平台使用最佳的计时器。


来自timeit.py:

if sys.platform == "win32":
    # On Windows, the best timer is time.clock()
    default_timer = time.clock
else:
    # On most other platforms the best timer is time.time()
    default_timer = time.time

当然可以,但您没有解释测量时间的差异。 - Martijn Pieters

0

time.time() 返回 "挂钟" 时间。

time.clock() 返回处理器使用的时间,如果您调用 time.sleep(),则不使用处理器,进程只是未进行调度,直到计时器决定将CPU返回给进程(在 Windows 上除外,在那里它会返回 "挂钟" 时间)。

请参见此问题:time.h clock() broken on OS X?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接