time.clock为什么比time.time更耗费时间?

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

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

我知道time.time使用系统时间和时间.clock使用处理器时钟。 time.time比time.clock更耗费时间,对我来说是有意义的.clock:处理器在整个时间内只是没有活动(例如,调用time.sleep的时间)。

但是,为什么/何时处理器时钟给出比系统时间大得多的时间呢?


附录

我做了一个粗略的testing,用一个标准映射计算相同的function,一个进程池映射和一个线程池映射。 可以理解的是,进程池速度更快,线程池更慢。 更有趣的是:时钟的时间比处理器池的时间要less ,但是在线程池中的时间更长

我再次明白,为什么处理器池的时钟定时更less:大概主进程没有太多工作,只是等待池进程完成。 但为什么线程池的时钟计时更多? 任何见解?

结果:

 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时间可能会超过挂钟时间。 我还没有专门在Python中看到过这个,但是在C中使用多线程的clock函数的时候,我已经明确地看到了这一点,大概Python代码直接调用了这个C函数。

关于“为什么”:你正在考虑错误的方式。 重要的是有多少个核心在运行你的程序。 如果一个内核在两秒的时间内运行了一秒钟,这对你来说是合理的,但是如果四个内核在同一时间间隔内运行一秒,会如何呢? 然后在2秒钟的时间内有4秒的CPU时间。 内核说明测量所有内核的CPU时间。 如果多个内核在同一秒内运行,那么在那一秒内就会花费多个CPU秒。 这是对调度程序来说很重要的成本衡量标准,可能这就是clock建立的标准。 这可能不是您关心的度量标准,但这就是它的工作原理。