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

Python 在多处理中处理大量数据和进程,python,numpy,multiprocessing,large-files,Python,Numpy,Multiprocessing,Large Files,因此,经过长时间的考虑和尝试,我再次询问专业人士。 我的场景是这样的:我想用一些函数比较两个数据集(np数组,约2000^3)。必须对ca 1000个随机点进行比较,每个点有300个不同的设置。第二个数据集保存此测量的中断条件的值,因此每个工作人员都必须知道整个数据集和掩码 我的想法是,因为我有64个CPU和200+GB的RAM,看起来就是这样 def compare(point,setting,data,mask): if mask[point]==somevalue:

因此,经过长时间的考虑和尝试,我再次询问专业人士。 我的场景是这样的:我想用一些函数比较两个数据集(np数组,约2000^3)。必须对ca 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()
这似乎适用于小型数据集,但不适用于所需范围内的数据集。工人们似乎被应用到游泳池中,游泳池被关闭,但随后什么也没有发生。我认为,应该有一种方法,以某种方式存储数据和掩码数组,以便每个工作人员都可以访问它们,而无需将它们显式地传递给每个工作人员(可能是内存映射?)。还是问题出在其他方面


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

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

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

是否抛出了任何错误,或者池只是自动关闭?在这两种情况下,最好在
compare
中放入一个大的
try/except
,并将任何错误写入一个文件。据我所知,对于小型阵列,即使是对于大量的点和100多个工作人员,它也能正常工作。我将寻找您的“尝试/例外”想法,但对于大数据量,第一行比较从未达到。好的-其他要尝试的是,不要通过
apply_async
(在
args
元组中)发送数据,您能从
compare
中的文件中读取它吗?试图以这种方式在进程之间发送大量数据存在问题,因为Python使用
pickle
发送数据问题在于,我的内存中已经有数据,所以我可以只使用保存数据的全局变量吗?(尽管如此,我还是要试试你的答案)作为模块级常量的全局变量可以很好地工作,但前提是它们足够小,所以这里也存在完全相同的问题。阅读这些指导原则……基本上,资源共享和进程间通信越少越好:是否抛出了任何错误,或者池只是自动关闭?在这两种情况下,最好在
compare
中放入一个大的
try/except
,并将任何错误写入一个文件。据我所知,对于小型阵列,即使是对于大量的点和100多个工作人员,它也能正常工作。我将寻找您的“尝试/例外”想法,但对于大数据量,第一行比较从未达到。好的-其他要尝试的是,不要通过
apply_async
(在
args
元组中)发送数据,您能从
compare
中的文件中读取它吗?试图以这种方式在进程之间发送大量数据存在问题,因为Python使用
pickle
发送数据问题在于,我的内存中已经有数据,所以我可以只使用保存数据的全局变量吗?(尽管如此,我还是要试试你的答案)作为模块级常量的全局变量可以很好地工作,但前提是它们足够小,所以这里也存在完全相同的问题。阅读这些指导原则……基本上,资源共享和进程间通信越少越好:为什么会这样?什么真正大?为什么会这样?什么真正大?