multiprocessing.Pool()的意外性能>> [

问题描述 投票:0回答:1
我发现multiprocessing.Pool()在以下情况下的行为不符合预期。任何人都可以解释它为什么会出现这种情况以及在可能的情况下如何提高性能。以下只是简单的代码:

import numpy as np import multiprocessing from itertools import repeat def group_data_by_runID(args): data, runID = args return data[data[:,0].astype(int)==runID,:] %%time DATA = np.array([[0,1],[0,2],[0,3],[0,4],[1,5],[1,6],[1,7],[1,8],[2,9],[2,10],[2,11],[2,12]]) runIDs = [0,1,2]*10000000 pool = multiprocessing.Pool(40) list(pool.map(group_data_by_runID, zip(repeat(DATA), runIDs)))

您可以在上面的代码中看到,我打算使用40个内核(56个内核,并且该系统上的可用内存远远超过此内存)来运行代码,这花了1分钟31秒。然后我用:

list(map(group_data_by_runID, zip(repeat(DATA), runIDs)))

[花了2分33秒。因此,再次使用40个内核的性能不到性能的两倍,这对我来说很奇怪。我还注意到,即使是40核,有时它实际上也不会在40核中启动,因为它可以在htop中看到。 

我在哪里做错了?以及如何提高速度。请注意,实际数据要大得多。

我发现multiprocessing.Pool()在以下情况下的行为不符合预期。任何人都可以解释它为什么会出现这种情况以及在可能的情况下如何提高性能。以下只是...

python performance dictionary multiprocessing pool
1个回答
0
投票
也许也许还有很多像我这样的人对python中的多处理性能感到困惑。有时您可能会获得性能提升,有时甚至可能会获得较差的性能。因此,我决定根据自己在多处理程序方面的经验自行回答这个问题。
© www.soinside.com 2019 - 2024. All rights reserved.