无需IPC通信即可共享对象

时间:2018-03-26 15:07:33

标签: python multiprocessing shared-memory python-multiprocessing

我想在父进程及其子进程之间共享multiprocessing.Array

self.procs = [MP.Process(target=worker, kwargs=dict(sh_array=array)
              for _ in range(num_workers)]

上面的代码是否正确?我只想在访问共享阵列时基于共享内存/文件映射进行快速IPC通信。我不希望任何消息传递或基于拷贝的IPC发生在幕后。那会破坏我写的代码的目的。

另外,我想以同样的方式传递一个类的不同实例,它们都引用同一个共享数组。这是否正常工作,还是应该单独传递共享数组,然后手动重建子进程中的对象?

1 个答案:

答案 0 :(得分:1)

  

上面的代码是否正确?

是的,这正是multiprocessing.Array的用途及其使用方式。

  

访问共享阵列时,我不想进行任何IPC通信。

我认为这里没有正确使用术语“IPC”。 IPC代表进程间通信,如果您有一个在进程之间共享的数组,那么您可以从其他进程读取您写入该数组的任何内容。换句话说,您正在进程之间进行通信。换句话说,IPC。共享内存是IPC,如果你不想要IPC,那么你就无法在进程之间共享内容。

你可能意味着完全不同的东西。也许你不想来回传递消息,或类似的东西?

  

另外,我想以同样的方式传递一个类的不同实例,它们都引用相同的共享数组。这是否正常工作,还是应该单独传递共享数组,然后手动重建子进程中的对象?

无论哪种方式都有效。做任何选项都可以让代码更自然地阅读。