【问题标题】:Limiting cpu cores before multiprocessing in python在python中进行多处理之前限制cpu内核
【发布时间】:2020-07-21 00:25:41
【问题描述】:

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

有什么建议吗?

非常感谢

【问题讨论】:

    标签: python process multiprocessing python-multiprocessing pool


    【解决方案1】:

    我找到了答案here

    基本上,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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-04
      • 1970-01-01
      • 2020-05-21
      • 1970-01-01
      • 2013-12-01
      • 1970-01-01
      • 2019-09-29
      • 2017-08-04
      相关资源
      最近更新 更多