无法使用multiprocessing.pool.ThreadPool模块充分利用所有cpu

时间:2016-08-13 12:04:17

标签: python multithreading threadpool python-multithreading python-multiprocessing

我有一台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,以便所有处理器都忙碌

1 个答案:

答案 0 :(得分:2)

我认为问题是因为您使用multiprocessing.pool.ThreadPool作为Pool,而不是multiprocessing.Pool。前者创建了包装Python线程的基于线程的虚拟Process对象,因此使用它不会像后者那样创建单独的进程。

请尝试使用from multiprocessing import Pool