我一直在与多处理模块一起尝试并行化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() ]
运行此代码时,遇到了我无法弄清的两件事
所有进程都不会以最大100%CPU使用率运行。实际上,每次所有进程的CPU使用率总和总计为100%(链接至屏幕截图)。流程真的使用不同的内核吗?如果没有,我如何确保他们这样做。
results of "top" command
产生了4个进程,但是在任何给定时间点只有2个处于活动状态。我在这里想念什么吗?
请让我知道是否可以提供更多信息。
答案 0 :(得分:1)
我认为您需要使用apply_async
而不是apply
来阻塞,直到结果准备就绪。
有关apply
,apply_async
和map
的详细信息,请参见SO question