multiprocessing.dummy在Python是不利用100%的CPU

问题描述 投票:31回答:1

我做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,因为我有一些问题与酸洗功能多处理模块。

python parallel-processing multiprocessing
1个回答
64
投票

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

multiprocessing.dummy复制multiprocessing的API,但并不比threading模块周围的一个封装。

这意味着你被Global Interpreter Lock (GIL)限制,只有一个线程实际上可以同时执行CPU绑定操作。这是怎么回事,让你从充分利用你的CPU。如果你想获得所有可用内核完全并行,你将需要解决你与multiprocessing.Pool击中酸洗问题。

需要注意的是multiprocessing.dummy可能仍然是有用的,如果你需要并行工作是IO约束,或者利用C-扩展释放GIL。对于纯Python代码,但是,你需要multiprocessing

© www.soinside.com 2019 - 2024. All rights reserved.