因此经过长时间的考虑和尝试后,我再一次向专业人士询问。 我的场景看起来像这样:我想比较两个数据集(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()
似乎适用于小型数据集,但不适用于所需范围内的数据集。工人似乎被应用到游泳池,游泳池关闭,但没有任何反应。我认为应该有一种方法,让数据和掩码数组以某种方式存储,这样每个工作者都可以访问它们,而不会将它们显式地传递给每个工作者(可能是内存映射?)。或者是其他问题?
我希望,能够很好地解释这个问题,如果没有,我会尽力澄清。
答案 0 :(得分:1)
尝试使用全局变量来存储公共数组,并允许继承父进程数据的分叉/子进程行为为您完成工作(尽管如果您的数组真的非常大,请注意这可能不起作用)。这可能会解决通过Process
构造函数挑选大量数据的问题。