Python中的multiprocessing.dummy没有使用100%的cpu

我用Python做机器学习项目,所以我必须并行地预测函数,我正在使用我的程序。

from multiprocessing.dummy import Pool from multiprocessing import cpu_count def multi_predict(X, predict, *args, **kwargs): pool = Pool(cpu_count()) results = pool.map(predict, X) pool.close() pool.join() return results 

问题是,我所有的CPU只加载20-40%(总计是100%)。 我使用multiprocessing.dummy是因为在酸洗function中多处理模块有问题。

当你使用multiprocessing.dummy ,你使用的是线程,而不是进程:

multiprocessing.dummy复制multiprocessing.dummy的API,但不过是threading模块的一个包装。

这意味着你被全局解释器锁(GIL)所限制,并且一次只有一个线程可以真正执行CPU绑定操作。 这将阻止你完全利用你的CPU。 如果你想在所有可用的内核之间获得完全的并行性,你将需要解决你正在使用multiprocessing.Pool来解决酸洗问题。

请注意,如果您需要并行化的工作是IO绑定,或者使用释放GIL的C扩展, multiprocessing.dummy可能仍然有用。 但是,对于纯Python代码,您需要进行multiprocessing

简单的多处理示例,一种简单的启动和执行的方法。

 import urllib2 from multiprocessing.dummy import Pool as ThreadPool urls = [ 'http://www.python.org', 'http://www.python.org/about/', 'http://www.onlamp.com/pub/a/python/2003/04/17/metaclasses.html', 'http://www.python.org/doc/', 'http://www.python.org/download/', 'http://www.python.org/getit/', 'http://www.python.org/community/', ] # Make the Pool of workers pool = ThreadPool(4) # Open the urls in their own threads # and return the results results = pool.map(urllib2.urlopen, urls) #close the pool and wait for the work to finish pool.close() pool.join()