我有一台32核的机器,使用multiprocessing.pool.ThreadPool库生成大小为32的ThreadPool。在我的案例中,我给出了示例片段2D数组是巨大的。
from multiprocessing.pool import ThreadPool as Pool
import time
def f(x):
return x[1]
if __name__ == '__main__':
pool = Pool(32) # start 4 worker processes
startTime=time.time()
twoDimensionalArraay=[[1,2],[2,3],[3,4],[4,5]]
d=pool.map(f,twoDimensionalArraay)
print time.time()-startTime
运行完进程后,我运行了top命令。并看到32个核心中只有一个繁忙,其余都是空闲
Cpu(s): 2.3%us, 1.3%sy, 0.0%ni, 96.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 132158392k total, 98751480k used, 33406912k free, 230528k buffers
Swap: 2097148k total, 0k used, 2097148k free, 17625092k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8062 centos 20 0 80.7g 75g 10m S 194.1 59.8 34:49.95 python
有人能告诉我如何充分利用这个cpu,使所有处理器都繁忙吗
我认为问题是因为您使用multiprocessing.pool.ThreadPool
作为Pool
,而不是multiprocessing.Pool
。前者创建基于线程的伪进程对象来包装Python线程,因此使用它不会像后者那样创建单独的进程。
请尝试使用from multiprocessing import Pool
。