我不确定这个标题是否适合我的情况:我想分享 numpy 数组的原因是它可能是我案例的潜在解决方案之一,但如果您有其他解决方案也不错。
我的任务:我需要用multiprocessing实现一个迭代算法,而这些进程中的每一个都需要有一个数据副本(这个数据很大,并且是只读的,并且在迭代算法期间不会改变)。
我写了一些伪代码来演示我的想法:
import multiprocessing
def worker_func(data, args):
# do sth...
return res
def compute(data, process_num, niter):
data
result = []
args = init()
for iter in range(niter):
args_chunk = split_args(args, process_num)
pool = multiprocessing.Pool()
for i in range(process_num):
result.append(pool.apply_async(worker_func,(data, args_chunk[i])))
pool.close()
pool.join()
# aggregate result and update args
for res in result:
args = update_args(res.get())
if __name__ == "__main__":
compute(data, 4, 100)
问题是在每次迭代中,我都必须将数据传递给子进程,这非常耗时。
我想出了两个潜在的解决方案:
在进程之间共享数据(它是 ndarray),这就是这个问题的标题。
保持子进程处于活动状态,例如守护进程或其他东西......并等待调用。通过这样做,我只需要在一开始就传递数据。
那么,有没有办法在进程之间共享一个只读的 numpy 数组?或者,如果您很好地实施了解决方案 2,它也可以工作。
犯罪嫌疑人X
相关分类