gpt4 book ai didi

python - 为什么 time.clock 给出的耗时比 time.time 长?

转载 作者:IT王子 更新时间:2023-10-29 00:57:45 37 4
gpt4 key购买 nike

我在 Ubuntu 上使用 time.clocktime.time 为一段 python 代码计时:

clock elapsed time: 8.770 s
time elapsed time: 1.869 s

我知道 time.time 使用系统时间,而 time.clock 使用处理器时钟。当 time.time 给出比 time.clock 更大的耗时时,这对我来说很有意义:处理器在整个时间都没有处于事件状态(例如,调用 time.sleep 的时间)。

但是为什么/什么时候处理器时钟会给出一个比系统时间的耗时?


附录

我使用标准映射、进程池映射和线程池映射对相同的函数进行了粗略的测试。可以理解,进程池更快,线程池更慢。更有趣的是:时钟计时小于处理器池中的时间计时,但大于线程池中的时间计时。

再次,我理解为什么处理器池的时钟计时较少:大概主进程不会做太多事情,只是等待池进程完成。但是为什么时钟计时更多的是用线程池呢?有什么见解吗?

结果:

map
time 1738.8
clock 1739.6
mp pool
time 580.1
clock 15.9
thread pool
time 3455.3
clock 5378.9

代码:

from time import clock, sleep, time
from multiprocessing.pool import ThreadPool
from multiprocessing import Pool
import random

def f(i):
x = [random.random() for j in range(100000)]
return x[i]

def t(fn):
t0, c0 = time(), clock()
for i in range(10): fn(f,range(16))
print ' time ', round(1000*(time()-t0),1)
print ' clock', round(1000*(clock()-c0),1)

if __name__ == '__main__':
print 'map'
t(map)

pool = Pool(8)
print 'mp pool'
t(pool.map)

pool = ThreadPool(8)
print 'thread pool'
t(pool.map)

最佳答案

如果您在多个 CPU 上执行,CPU 时间可能会超过 wall time。我没有在 Python 中具体看到这一点,但我在将 clock 函数与来自 C 的多个线程一起使用时肯定看到过这一点,并且大概 Python 代码只是直接调用这个 C 函数。

关于“为什么”:你想错了。重要的是有多少 内核在运行您的程序。如果一个内核在两秒的墙时间内运行一秒,这对您来说是有意义的,但如果四个内核在同一时间间隔内每个运行一秒会怎样。然后你在 2 秒的墙上时间中有 4 秒的 CPU 时间。内核计算所有内核的 CPU 时间。如果多个内核在同一秒内运行,那么您在那一秒内花费了多个 CPU 秒数。这是对调度程序很重要的成本度量,并且大概是构建 clock 的度量标准。这可能不是您关心的指标,但这就是它的工作原理。

关于python - 为什么 time.clock 给出的耗时比 time.time 长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27863717/

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