Python多处理限制为每个核心10%?

时间:2017-03-14 10:36:54

标签: python multithreading multiprocessing threadpool python-multithreading

我有一个循环,我一直在努力加快。我注意到Python只使用单核,所以我导入了多处理包并设置了一个池。现在整个过程分布在多个核心上,但它们似乎限制在10%左右。

这是预期的/最佳的吗?或者有没有办法从每个核心利用更多?

htop screenshot

代码:

from multiprocessing.dummy import Pool as ThreadPool

//...more code here...

pool = ThreadPool(os.cpu_count())
pool.starmap(getSubject, zip(range(1, Nsub)))
pool.close()
pool.join()

PS。在使用Pool htop之前,将显示一个核心为100%,其他核心为~0%。

1 个答案:

答案 0 :(得分:1)

multiprocessing.dummy.Pool是一个主题池。由于GIL,您不会充分利用多个核心。如果您希望使用流程,请将其更改为multiprocessing.Pool

请注意,核心的总使用量还取决于getSubject的确切含义。如果您正在进行某些同步(例如锁定),那么您可能也会看到性能下降。