gpt4 book ai didi

Python 多处理 : RuntimeError: "Queue objects should only be shared between processes through inheritance"

转载 作者:太空狗 更新时间:2023-10-30 02:55:22 29 4
gpt4 key购买 nike

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

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

最佳答案

python 中的Queue 实现依赖于系统pipe 将数据从一个进程传输到另一个进程和一些信号量 来保护读取并写在这个管道上。

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

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

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

关于Python 多处理 : RuntimeError: "Queue objects should only be shared between processes through inheritance",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42638147/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com