因此,经过长时间的考虑和尝试,我再次询问专业人士。我的场景是这样的:我想将两个数据集(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()
这似乎适用于小型数据集,但不适用于所需范围内的数据集。工人似乎被应用到池中并且池被关闭了,但随后什么也没有发生。我认为,应该有一种方法,以某种方式存储数据和掩码数组,以便每个工作人员都可以访问它们,而无需将它们显式传递给每个工作人员(也许是内存映射?)。或者问题是别的什么?
我希望能够很好地解释这个问题,如果没有,我会尽力澄清。