gpt4 book ai didi

python - 理解 time.clock() 和 time.time()

转载 作者:行者123 更新时间:2023-11-28 21:53:39 33 4
gpt4 key购买 nike

尽管它们已被弃用并且有比 time 更好的模块(即 timeit),但我想知道这两个函数 time 之间的区别.clock()time.time()

从后者 (time.time()) 开始,它基本上以秒为单位精确地返回从 01/01/1970(如果我没记错的话)耗时,一般来说, 1 秒。 '到这里为止很容易。

相反,time.clock() 仍然让我感到困惑。来自文档:

On Unix, return the current processor time as a floating point number expressed in seconds. The precision, and in fact the very definition of the meaning of “processor time”, depends on that of the C function of the same name, but in any case, this is the function to use for benchmarking Python or timing algorithms.

On Windows, this function returns wall-clock seconds elapsed since the first call to this function, as a floating point number, based on the Win32 function QueryPerformanceCounter(). The resolution is typically better than one microsecond.

现在在 Windows 中很清楚,它做 time.time() 做的事情,只是精度更高。

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

import time

def procedure():
time.sleep(2.5)

# measure process time
t0 = time.clock()
procedure()
print(time.clock() - t0, "process time")

我得到了 5.300000000000096e-05 秒的处理时间,这对我来说真的很奇怪。

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

[...] time.clock() measures the amount of CPU time that has been used by the current process.

但是我怎么也看不出来,当前进程在干什么用的时间?当我在 Unix 上调用 time.clock() 时,我得到一个 float ,那是什么意思?该过程从 ?? 开始消耗的时间量到 ??

最佳答案

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

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

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

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

while True:
i += 1

它永远不会放弃轮到它;它将使用 100% 的处理器。

那么,这与 time.clock() 有什么关系?在 Linux 中,time.clock() 返回您的进程自首次启动以来所有轮次的持续时间总和。这是对流程任务难度的公平衡量。如果您只测量挂钟时间(即 time.time()),那么您的任务持续时间将取决于有多少其他进程在运行以及它们在做什么。


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

关于python - 理解 time.clock() 和 time.time(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25773901/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com