【问题标题】:Python multiprocessing: RuntimeError: "Queue objects should only be shared between processes through inheritance"Python多处理:RuntimeError:“队列对象只能通过继承在进程之间共享”
【发布时间】:2017-07-27 01:29:18
【问题描述】:

我知道 multiprocessing.Manager() 以及如何使用它来创建共享对象。特别是可以在工作人员之间共享的队列。有这个question,这个question,还有这个question

但是,这些链接没有提到为什么我们可以使用继承在进程之间共享。据我了解,仍然只能在这种情况下复制队列。

【问题讨论】:

  • 你是不是想错了“继承”的意思?他们谈论的是从产生它们的进程继承队列的进程,而不是class Child(Parent) OOP 继承。

标签: python queue multiprocessing python-multiprocessing


【解决方案1】:

python 中的Queue 实现依赖于系统pipe 将数据从一个进程传输到另一个进程,还有一些semaphores 来保护pipe 上的读写。

pipe 在进程中作为打开文件处理,并且由于操作系统限制,只能在生成时与子进程共享。
semaphores 也被视为只应在生成时共享的文件,至少在基于 UNIX 的系统中,对于早期版本的 python。

由于这两个子对象通常不能共享,Queue 一旦启动就不能被腌制并发送到子进程。

但是,对于某些操作系统和最新版本的 python,可以共享Connection 并创建可共享的Semaphore。因此,理论上您可以创建自己的Queue,可以在进程之间共享。但它涉及大量黑客攻击,可能不是很安全。

【讨论】:

    猜你喜欢
    • 2016-04-23
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 2018-06-25
    • 2010-10-14
    • 2012-07-22
    • 2012-11-27
    • 2012-04-12
    相关资源
    最近更新 更多