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

2024-10-03 13:21:38 发布

您现在位置: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个核心,但是该函数不是我的,而是我调用的应用程序,我不知道在源代码中限制在哪里

有什么建议吗

非常感谢


Tags: 函数代码in程序核心for进程过程
1条回答
网友
1楼 · 发布于 2024-10-03 13:21:38

我找到了答案here

基本上,(我怀疑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

相关问题 更多 >