为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

呼啦一阵风 2019-12-15 12:12:29
我正在用Python做一个机器学习项目,所以我必须做并行预测功能,这是我在程序中使用的功能。from multiprocessing.dummy import Poolfrom multiprocessing import cpu_countdef 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,因为我在酸洗功能中的多处理模块有一些问题。
查看完整描述

3 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

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


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


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


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



查看完整回答
反对 回复 2019-12-16
?
开心每一天1111

TA贡献1836条经验 获得超12个赞

或使用非基于GIL的Python实现(如Jython或IronPython ...)或从2015 年导入 PyPy的无GIL STM版本。:) 

查看完整回答
反对 回复 2019-12-16
?
撒科打诨

TA贡献1934条经验 获得超2个赞

谁知道。可能有很多原因。问题中没有足够的信息。注意:在我发表评论时,答案甚至没有提到可以发布GIL。假定所有性能问题均归因于具有多个线程的Python程序中的GIL 是错误的。



查看完整回答
反对 回复 2019-12-16
  • 3 回答
  • 0 关注
  • 316 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信