我发现以下代码行通过重复调用名为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)
答案 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绑定的并发问题,那么这可能就是问题所在!