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



我有一个需要多处理的程序。它调用的函数将自动使用每个可用的核心。然而,这在某种程度上导致了一个问题,因为每个核心都用于每个进程,这意味着每个核心都有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个核心,但该函数不是我的,而是我调用的应用程序,我不知道在源代码中将其限制在哪里。

有什么建议吗?

非常感谢

我在这里找到了答案

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

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

最新更新