首页 > 解决方案 > 多处理:我想更好地理解这段代码

问题描述

我发现以下代码行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)

标签: pythonpython-3.x

解决方案


multiprocessing.Pool() 比只使用普通函数慢

您尝试并行化的函数不需要足够的 CPU 资源(即 CPU 时间)来合理化并行化!

并且可能是由 Python 使用 GIL 处理多线程和多处理的方式引起的:

何时使用线程以及使用多少线程

看看GIL,你会更好地理解为什么。

如果你想要 Python 3.8 中的并发代码,你会遇到 CPU 绑定的并发问题,那么这可能就是问题所在!


推荐阅读