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

标签 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()

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

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

最佳答案

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

关于python - 在多处理中处理大量数据和进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18133185/

相关文章:

python - 绘制沿着曲线滚动的球

python - 使用索引和 bool 选择后更新二维矩阵上的值

python - 使用多处理从多个进程中排队 tf.RandomShuffleQueue

python - 如何获取paypal的交易信息

python - Python 标准库包/模块不在名为 python 的包中是有原因的吗?

python - 多维形状的 np.zeros 结构

python - web2py 无法识别模块目录中的模块

python数学,numpy模块不同的结果?

c++ - 如何在新进程中运行一个函数?

python - multiprocessing.Pool : When to use apply, apply_async 或映射?