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

时间:2013-07-05 23:46:04

标签: python macos time

我正在运行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 个答案:

答案 0 :(得分:7)

来自time.clock上的文档:

  

在Unix上,将当前处理器时间返回为以秒为单位的浮点数。精确度,实际上是“处理器时间”含义的定义,取决于同名C函数的精度,但无论如何,这是用于对Python或时序算法进行基准测试的函数。 p>

来自time.time上的文档:

  

返回自纪元以来的秒数作为浮点数。请注意,即使时间总是作为浮点数返回,但并非所有系统都提供的精度高于1秒。虽然此函数通常返回非递减值,但如果在两次调用之间设置了系统时钟,则它可以返回比先前调用更低的值。

time.time()以秒为单位的度量,time.clock()衡量当前进程使用的CPU时间量。但是在Windows上,这是不同的,因为clock()也可以测量秒数。

Here's a similar question

答案 1 :(得分:7)

而不是使用time.timetime.clock使用timeit.default_timer。对于所有其他平台,这将在time.clocksys.platform == "win32"时返回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

答案 2 :(得分:0)

time.time()返回“挂钟”时间。

time.clock()返回处理器使用的时间,如果你调用time.sleep()你没有使用处理器,那么这个过程只是不定期,直到定时器决定让进程返回cpu(除了窗口,它返回“挂钟”时间。)

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