了解time.clock()和time.time()

时间:2014-09-10 19:50:03

标签: python python-3.x

即使它们已被弃用且模块比time更好(即timeit),我想知道两个函数time.clock()和{{1}之间的差异}。

从后者(time.time())开始,它基本上以秒为单位返回从01/01/1970(如果我没有错)经过的时间,精度一般为1秒。 “直到这里很容易。

相反,time.time()仍让我感到困惑。 来自doc:

  

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

在Windows上,此函数返回自第一次调用此函数以来经过的挂钟秒,作为浮点数,基于Win32函数QueryPerformanceCounter()。分辨率通常优于1微秒。

现在在Windows中非常清楚,它只做time.clock()所做的事情,只有更好的精确度。

但是在Unix / Linux中我无法理解。我尝试了以下代码:

time.time()

我得到的import time def procedure(): time.sleep(2.5) # measure process time t0 = time.clock() procedure() print(time.clock() - t0, "process time") 对我来说真的很奇怪。

阅读this已发布的问题答案说:

  

[...] time.clock()测量当前进程使用的CPU时间量。

但是我无法得到它,当前进程用来做什么的时间?当我在Unix上调用5.300000000000096e-05 seconds process time时,我得到一个浮点数,这在那一瞬间意味着什么?过程消耗的时间从??到?? ??

2 个答案:

答案 0 :(得分:5)

在多处理系统(例如Linux或Windows)中,依次运行多个独立进程。当一个进程正在运行时,所有其他进程都在等待 * 。偶尔跑步过程会轮到它(有时合作,有时会被迫停止运行)。然后其他一些过程转向运行。

此进程切换每秒可发生数十次,数百次甚至数千次。从人类用户的角度来看,所有进程似乎都在同时运行。但实际上,它们都在轮流运行。

当一个进程调用time.sleep(2.5)时,它会宣布它正在放弃当前回合的剩余时间,并且对于将来的任何转弯至少在接下来的2.5秒内不感兴趣。因此,在接下来的2.5秒内,它会消耗没有处理器时间。

相反,如果这是系统中唯一的过程:

while True:
    i += 1
它永远不会放弃它;它将使用100%的处理器。

那么,这与time.clock()有什么关系呢?在Linux中,time.clock()返回您的进程自首次启动以来所执行的所有转弯的持续时间总和。这是衡量您的流程任务有多难的一个衡量标准。如果您只测量挂钟时间(即time.time()),那么您的任务的持续时间将取决于正在运行的其他进程数以及它们正在执行的操作。


* 此描述适用于单处理器多处理系统。对于多处理器系统(或多核系统),实际上可以同时运行许多进程。无论如何,time.clock()返回所有转弯的持续时间总和。

答案 1 :(得分:0)

time.time()返回的值可以解释为当前日期和时间。 time.clock()返回当前进程使用了​​多少CPU时间的度量。