4
多处理中的共享内存对象
假设我有一个很大的内存numpy数组,我有一个函数func将这个巨型数组作为输入(以及其他一些参数)。func具有不同参数的参数可以并行运行。例如: def func(arr, param): # do stuff to arr, param # build array arr pool = Pool(processes = 6) results = [pool.apply_async(func, [arr, param]) for param in all_params] output = [res.get() for res in results] 如果我使用多处理库,那么该巨型数组将多次复制到不同的进程中。 有没有办法让不同的进程共享同一数组?该数组对象是只读的,永远不会被修改。 更复杂的是,如果arr不是数组,而是任意python对象,是否可以共享它? [编辑] 我读了答案,但仍然有些困惑。由于fork()是写时复制的,因此在python多处理库中生成新进程时,我们不应调用任何额外的开销。但是下面的代码表明存在巨大的开销: from multiprocessing import Pool, Manager import numpy as np; import …