Python multiprocessing: RuntimeError: "Queue objects should only be shared between processes through inheritance"

Python multiprocessing: RuntimeError: "Queue objects should only be shared between processes through inheritance"

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

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

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

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

的早期版本

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

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