在多处理中处理大量数据和进程

时间:2013-08-08 18:17:29

标签: python numpy multiprocessing large-files

因此经过长时间的考虑和尝试后,我再一次向专业人士询问。 我的场景看起来像这样:我想比较两个数据集(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()

似乎适用于小型数据集,但不适用于所需范围内的数据集。工人似乎被应用到游泳池,游泳池关闭,但没有任何反应。我认为应该有一种方法,让数据和掩码数组以某种方式存储,这样每个工作者都可以访问它们,而不会将它们显式地传递给每个工作者(可能是内存映射?)。或者是其他问题?

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

1 个答案:

答案 0 :(得分:1)

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