我想在父进程及其子进程之间共享multiprocessing.Array
:
self.procs = [MP.Process(target=worker, kwargs=dict(sh_array=array)
for _ in range(num_workers)]
上面的代码是否正确?我只想在访问共享阵列时基于共享内存/文件映射进行快速IPC通信。我不希望任何消息传递或基于拷贝的IPC发生在幕后。那会破坏我写的代码的目的。
另外,我想以同样的方式传递一个类的不同实例,它们都引用同一个共享数组。这是否正常工作,还是应该单独传递共享数组,然后手动重建子进程中的对象?
答案 0 :(得分:1)
上面的代码是否正确?
是的,这正是multiprocessing.Array
的用途及其使用方式。
访问共享阵列时,我不想进行任何IPC通信。
我认为这里没有正确使用术语“IPC”。 IPC代表进程间通信,如果您有一个在进程之间共享的数组,那么您可以从其他进程读取您写入该数组的任何内容。换句话说,您正在进程之间进行通信。换句话说,IPC。共享内存是IPC,如果你不想要IPC,那么你就无法在进程之间共享内容。
你可能意味着完全不同的东西。也许你不想来回传递消息,或类似的东西?
另外,我想以同样的方式传递一个类的不同实例,它们都引用相同的共享数组。这是否正常工作,还是应该单独传递共享数组,然后手动重建子进程中的对象?
无论哪种方式都有效。做任何选项都可以让代码更自然地阅读。