在 python 中进行多处理之前限制 cpu 个内核

Limiting cpu cores before multiprocessing in python

我有一个需要多处理的程序。它调用的函数将自动使用每个可用的内核。然而,这在某种程度上会导致问题,因为每个核心都用于每个进程,这意味着每个核心都有 100*x % 的负载,其中 x 是生成的进程数。所以对于 6 个过程,每个疮都使用了 600%。

代码很简单,使用常用的:

pool = Pool(processes=6)
for i in pool.imap_unordered(main_program, range(100)):
    print('Task in pool has finished')

然而,这将使每个内核处于 600% 的负载,并且比单独执行每个进程要慢。 我假设我用错了 mp 模块,但我似乎无法弄清楚在哪里。

注意:我理想的解决方案是将主要功能限制为仅使用 1 个核心,但该功能不是我的,而是我调用的应用程序,我不知道在源代码中的何处进行限制.

有什么建议吗?

非常感谢

我找到了答案

基本上,BLAS 功能(我怀疑是 numpy 的)干扰了我的多处理。这修复了它:

os.environ["OMP_NUM_THREADS"] = "1" # export OMP_NUM_THREADS=1
os.environ["OPENBLAS_NUM_THREADS"] = "1" # export OPENBLAS_NUM_THREADS=1
os.environ["MKL_NUM_THREADS"] = "1" # export MKL_NUM_THREADS=1
os.environ["VECLIB_MAXIMUM_THREADS"] = "1" # export VECLIB_MAXIMUM_THREADS=1
os.environ["NUMEXPR_NUM_THREADS"] = "1" # export NUMEXPR_NUM_THREADS=1