使用multiprocessing.pool.ThreadPool模块无法完全利用所有cpu



我有一台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

相关内容

  • 没有找到相关文章

最新更新