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

发布于 2021-01-29 15:06:03

我正在用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,因为我在酸洗功能中的多处理模块有一些问题。

关注者
0
被浏览
52
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    使用时multiprocessing.dummy,您使用的是线程,而不是进程:

    multiprocessing.dummy复制API的API,multiprocessing但仅不过是threading模块周围的包装器。

    这意味着您受到全局解释器锁(GIL)的限制,并且实际上只有一个线程可以一次执行CPU绑定的操作。这将使您无法充分利用CPU。如果要在所有可用内核之间获得完全的并行性,则需要解决您遇到的酸洗问题multiprocessing.Pool

    请注意,multiprocessing.dummy如果您需要并行化的工作是受IO限制的,或者利用释放GIL的C扩展名,则这可能仍然有用。但是,对于纯Python代码,您需要multiprocessing



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看