【问题标题】:Sharing an object without IPC communication在没有 IPC 通信的情况下共享对象
【发布时间】:2018-09-04 18:59:47
【问题描述】:

我想在父进程和它的子进程之间共享一个multiprocessing.Array

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

上面的代码做对了吗?当我访问共享数组时,我只想要基于共享内存/文件映射的快速 IPC 通信。我不希望幕后发生任何消息传递或基于副本的 IPC。这会破坏我正在编写的代码的目的。

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

【问题讨论】:

    标签: python multiprocessing shared-memory python-multiprocessing


    【解决方案1】:

    上面的代码做对了吗?

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

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

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

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

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

    任何一种方式都有效。选择使代码更易于阅读的选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多