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

www*_*iam 4 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
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我应该使用time.time()进行可靠的估算吗?

Ter*_*ryA 7

来自以下文档time.clock:

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

来自以下文档time.time:

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

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

这是一个类似的问题


unu*_*tbu 7

而不是使用time.timetime.clock使用timeit.default_timer.这将time.clock在所有其他平台sys.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
Run Code Online (Sandbox Code Playgroud)