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() 进行可靠的估计吗?

4

3 回答 3

7

从上的文档time.clock

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

从上的文档time.time

以浮点数形式返回自纪元以来的时间(以秒为单位)。请注意,尽管时间始终以浮点数形式返回,但并非所有系统都提供比 1 秒更好的精度的时间。虽然此函数通常返回非递减值,但如果系统时钟已在两次调用之间调回,则它可以返回比先前调用更低的值。

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

这是一个类似的问题

于 2013-07-05T23:51:58.233 回答
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
于 2013-07-05T23:57:20.573 回答
0

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

time.clock()返回处理器使用的时间,如果您调用time.sleep()您未使用处理器,则该进程只是未安排的,直到计时器决定将 cpu 还给该进程(在返回“挂钟”时间的 Windows 上除外)。

看到这个问题:time.h clock() 在 OS X 上坏了?

于 2013-07-06T02:17:03.800 回答