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

Python 无法使用multiprocessing.pool.ThreadPool模块充分利用所有cpu,python,multithreading,threadpool,python-multithreading,python-multiprocessing,Python,Multithreading,Threadpool,Python Multithreading,Python Multiprocessing,我有一台32核的机器,使用multiprocessing.pool.ThreadPool库生成大小为32的线程池。在我的例子中,我已经给出了示例片段,2D数组是巨大的 from multiprocessing.pool import ThreadPool as Pool import time def f(x): return x[1] if __name__ == '__main__': pool = Pool(32) # start 4 work

我有一台32核的机器,使用multiprocessing.pool.ThreadPool库生成大小为32的线程池。在我的例子中,我已经给出了示例片段,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,而不是multiprocessing.pool。前者创建基于线程的虚拟进程对象来包装Python线程,因此使用它不会像后者那样创建单独的进程


请尝试改用从多处理导入池使用。

os.systemtaskset-p 0xFFFFFFFF%d%os.getPid运行进程后,请尝试在运行进程时查看有多少正在使用。抱歉,这是在运行进程时。好的,在这种情况下,您应该回答您的问题并更正它。您是否尝试了我的建议?您在这方面做得非常正确,它在我所有的20个Core上都非常有效。我已经投了赞成票,我不是问这个问题的人。@CodeGuru:对不起,我对评论的来源感到困惑。