我知道multiprocessing.Manager()以及它如何用于创建共享对象。特别是,可以在工人之间共享的队列。有question,此question和此question。
但是,这些链接没有提到为什么我们可以使用继承来在进程之间共享。据我了解,在这种情况下仍然只能复制一个队列。
答案 0 :(得分:4)
python中的Queue
实现依赖于系统pipe
将数据从一个进程传输到另一个进程以及一些semaphores
来保护对此pipe
的读写操作。
由于操作系统的限制,pipe
在进程中作为一个打开的文件处理,并且只能在生成时与子进程共享。
对于早期版本的python,semaphores
也被视为只应在产卵时共享的文件,至少在基于UNIX的系统中是这样的。
由于这两个子对象通常无法共享,因此Queue
无法被腌制并在启动后发送到子进程。
但是,对于某些操作系统和最新版本的python,可以共享Connection
并创建可共享的Semaphore
。因此,理论上您可以创建自己的Queue
,可以在进程之间共享。但它涉及很多黑客攻击,可能不太安全。