python - 多处理:我想更好地理解这段代码
问题描述
我发现以下代码行mx
通过重复调用一个名为fun
.
但是,我想更好地了解它的作用。
此外,我为并行池分配了 16 个核心,但是,我注意到在计算过程中同时运行的核心不超过 2 个。
有人可以解释这段代码的作用以及为什么只有部分线程在工作吗?
谢谢!
from tqdm import tqdm
from multiprocessing import Pool
from functools import partial
with Pool(processes = 16) as p_mx:
mx = tqdm(p_mx.imap(partial(fun, L), nodes), total = n)
解决方案
multiprocessing.Pool() 比只使用普通函数慢
您尝试并行化的函数不需要足够的 CPU 资源(即 CPU 时间)来合理化并行化!
并且可能是由 Python 使用 GIL 处理多线程和多处理的方式引起的:
看看GIL,你会更好地理解为什么。
如果你想要 Python 3.8 中的并发代码,你会遇到 CPU 绑定的并发问题,那么这可能就是问题所在!
推荐阅读
- intellij-idea - Intellij Idea 隐藏 *.log 文件
- html - 在 CSS 中的一个 div 标签内将项目彼此相邻排列
- php - 即使设置费用失败,PayPal PHP SDK 也会执行计费协议
- python - 内存错误 - 如果为 Null Pandas,则右加入
- android - 如何将 Firebase Admin SDK 添加到 Google Cloud Platform 并与应用程序通信?
- whitespace - 是否有任何编程语言为尾随空格分配含义?
- eclipse - 如何从命令行在当前打开的 Eclipse 工作区中打开文件?
- python - Python使用循环打开和保存多个文件
- json - Postman 将 Json 转换为 x-www-form-urlencoded
- angular - 将 asp.net 核心应用程序连接到 windows 服务器域中的网络驱动器