Python 多处理:RuntimeError:“队列对象只能通过继承在进程之间共享”

del*_*bao 6 python queue multiprocessing python-multiprocessing

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

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

Tho*_*eau 6

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

pipe如在该过程打开的文件处理,并且仅可以在产卵时间的子进程共享由于OS的限制,。
semaphores也被视为应该只在产卵时间共享,至少在基于UNIX系统中,蟒蛇的早期版本的文件。

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

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