【问题标题】:Why are there differences in Python time.time() and time.clock() on Mac OS X?为什么 Mac OS X 上的 Python time.time() 和 time.clock() 存在差异?
【发布时间】:2013-07-05 23:46:03
【问题描述】:

我正在运行 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() 来进行可靠的估计吗?

【问题讨论】:

    标签: python macos time


    【解决方案1】:

    来自time.clock 上的文档:

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

    来自time.time 上的文档:

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

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

    Here's a similar question

    【讨论】:

    • 有助于理解python的某些部分(特别是日期/时间函数)只是操作系统中存在的“传统”调用的非常薄的包装器。这些因平台而异......
    【解决方案2】:

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

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


    来自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
    

    【讨论】:

    • 当然可以,但你不知道测量时间的差异。
    【解决方案3】:

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

    time.clock()返回处理器使用的时间,如果你调用time.sleep()你没有使用处理器,这个进程只是计划外的,直到定时器决定把cpu还给进程(除了在它返回的windows上“挂钟”时间)。

    看到这个问题:time.h clock() broken on OS X?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-15
      • 1970-01-01
      • 2010-09-10
      • 2010-11-29
      • 1970-01-01
      相关资源
      最近更新 更多