1

因此,经过长时间的考虑和尝试,我再次询问专业人士。我的场景是这样的:我想将两个数据集(np 数组,约 2000^3)与某个函数进行比较。这种比较必须针对大约 1000 个随机点进行,每个点有 300 个不同的设置。第二个数据集保存此测量的破坏条件的值,因此每个工作人员都必须知道整个数据集和掩码。

我的想法,因为我有 64 个 CPU 和 200+GB 的 RAM,看起来像这样

def compare(point,setting,data,mask): 
    if mask[point]==somevalue:
        for i in setting:
            do.something(data)


def parallel():
    pool = mp.Pool(processes=4)
    for i in range(points):
        pool.apply_async(compare, args = (point,setting,data,mask), callback = some_call)
    pool.close()
    pool.join() 

if __name__ == '__main__':
    parallel()

这似乎适用于小型数据集,但不适用于所需范围内的数据集。工人似乎被应用到池中并且池被关闭了,但随后什么也没有发生。我认为,应该有一种方法,以某种方式存储数据和掩码数组,以便每个工作人员都可以访问它们,而无需将它们显式传递给每个工作人员(也许是内存映射?)。或者问题是别的什么?

我希望能够很好地解释这个问题,如果没有,我会尽力澄清。

4

1 回答 1

1

尝试仅使用全局变量来存储您的公共数组,并允许继承父进程数据的分叉/子进程行为为您完成工作(尽管请注意,如果您的数组真的很大,这可能不起作用)。Process这可能会解决通过构造函数腌制大量数据的问题。

于 2013-08-08T19:07:52.543 回答