我做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,因为我有一些问题与酸洗功能多处理模块。
当您使用multiprocessing.dummy
,你使用线程,而不是进程:
multiprocessing.dummy
复制multiprocessing
的API,但并不比threading
模块周围的一个封装。
这意味着你被Global Interpreter Lock (GIL)限制,只有一个线程实际上可以同时执行CPU绑定操作。这是怎么回事,让你从充分利用你的CPU。如果你想获得所有可用内核完全并行,你将需要解决你与multiprocessing.Pool
击中酸洗问题。
需要注意的是multiprocessing.dummy
可能仍然是有用的,如果你需要并行工作是IO约束,或者利用C-扩展释放GIL。对于纯Python代码,但是,你需要multiprocessing
。