我使用time.clock和time.time在Ubuntu上计时了一段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)发布于 2015-01-09 16:57:37
如果在多个CPU上执行,CPU时间可能会超过墙壁时间。我在Python中没有具体看到这一点,但是在使用clock函数与C中的多个线程一起使用时,我确实看到了这一点,而且大概Python代码只是直接调用这个C函数。
关于“为什么”:你想错了。重要的是有多少核心在运行你的程序。如果一个核心在2秒的时间内运行1秒,这对你来说是有意义的,但如果四个核心在同一时间间隔内运行1秒,又会怎样呢?然后你有4秒的CPU时间和2秒的墙时间。内核负责测量所有内核的CPU时间。如果多个核心在同一秒钟内运行,那么在这一秒内您会花费多个CPU秒。这是对调度程序重要的成本度量,也可能是clock所基于的度量。这可能不是你所关心的度量,但这就是它的工作原理。
https://stackoverflow.com/questions/27863717
复制相似问题