多处理:我想更好地理解此代码

时间:2019-07-25 09:18:44

标签: python python-3.x

我发现以下代码行通过重复调用名为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)

1 个答案:

答案 0 :(得分:0)

multiprocessing.Pool() slower than just using ordinary functions

  

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

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

When to use threading and how many threads to use

看看GIL,您将对原因有更好的了解。

  

如果您要使用python 3.8中的并发代码,则遇到CPU绑定的并发问题,那么这可能就是问题所在!