我正在运行一个脚本,其中包括
import multiprocess as mp
def sample():
# ... do things...
return x
num_cores = 50
num_samples = 1000
with mp.Pool(num_cores) as p:
samples = p.starmap(self, [() for i in range(num_samples)])
我的服务器有128个核心。然而,即使我创建了一个只有 50 个核心的池,当我在终端中运行
htop
时,我看到我的脚本正在使用所有 128 个核心,并且每个核心的使用率为 100%。
为什么会发生这种情况?我认为只有
num_cores
核心可以使用我的脚本。或者这取决于 sample()
实际在做什么?
mp.Pool
的参数告诉它一次最多运行多少个进程;它不会限制这些进程使用多少个核心。
如果每个进程使用多个内核,则多处理池可以轻松使用比它被告知要调用的并发进程数更多的内核。