我在 Ubuntu 上使用了一段 python 代码的计时time.clock
and time.time
:
clock elapsed time: 8.770 s
time elapsed time: 1.869 s
我知道 time.time 使用系统时间,time.clock 使用处理器时钟。当 time.time 给出比 time.clock 更大的经过时间时,这对我来说是有意义的:处理器在整个时间内都没有处于活动状态(例如,调用 time.time 的时间)time.sleep
).
但是为什么/什么时候处理器时钟会给出如此多的经过时间greater比系统时间呢?
addendum
我使用标准映射、进程池映射和线程池映射对计算相同的函数进行了粗略测试。可以理解的是,进程池更快,线程池更慢。更有趣的是:时钟计时是less比处理器池的时间计时但是greater在线程池中。
再次,我理解为什么处理器池的时钟计时较少:大概主进程不做太多事情,只是等待池进程完成。但为什么时钟计时更多的是用线程池呢?有什么见解吗?
Results:
map
time 1738.8
clock 1739.6
mp pool
time 580.1
clock 15.9
thread pool
time 3455.3
clock 5378.9
Code:
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)