我有一台32核机器,使用multiprocessing.pool.ThreadPool库生成大小为32的ThreadPool。我已经在我的情况下给出了样本片段2 D数组是巨大的。
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个中只有一个核心忙着休息是IDLE
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,以便所有处理器都忙碌
答案 0 :(得分:2)
我认为问题是因为您使用multiprocessing.pool.ThreadPool
作为Pool
,而不是multiprocessing.Pool
。前者创建了包装Python线程的基于线程的虚拟Process对象,因此使用它不会像后者那样创建单独的进程。
请尝试使用from multiprocessing import Pool
。