无法通过多处理使用100%的CPU /内核

问题描述 投票:0回答:1

我一直在与多处理模块一起尝试并行化一个for循环,该循环需要27分钟才能在单个内核上运行。我可以使用12个CPU内核。

我正在使用的代码的实质在下面给出,以进行并行化:

import multiprocessing as mp

def Parallel_Work(val,b,c):
    # Filter basis val to make a dataframe and do some work on it
    # ...

values = pd.Series( [ "CompanyA",
                      "CompanyB",
                      "CompanyC", ] ) # Actual values list is quite big

with mp.Pool(processes=4) as pool:
        results= [pool.apply( Parallel_Work,
                              args = ( val, b, c )
                              ) for val in values.unique() ]

运行此代码时,遇到了我无法弄清的两件事

  1. 没有一个进程在最大100%CPU使用率下运行。实际上,每次所有进程的CPU使用率总和总计为100%(链接至屏幕截图)。流程真的使用不同的核心吗?如果没有,我如何确保他们这样做。enter image description hereresults of "top" command

  2. 产生了4个进程,但是在任何给定时间点只有2个处于活动状态。我在这里想念什么吗?

请让我知道是否可以提供更多信息。

python parallel-processing multiprocessing python-multiprocessing cpu-usage
1个回答
1
投票

我认为您需要使用apply_async而不是apply来阻塞,直到结果准备就绪。

有关SO questionapplyapply_async的详细信息,请参见此map

© www.soinside.com 2019 - 2024. All rights reserved.