python 多处理模块中的进程是否自动共享队列对象?

Is queue object automatically shared among Processes from python multiprocessing module?

我最近开始使用 Python 多处理模块。我了解队列的解释,但最近我在 https://pymotw.com/2/multiprocessing/communication.html 上发现队列不需要作为参数传递给 Proccess 构造函数方法,例如

p = Process(target=f, args=(q,)),

相反,它们似乎是全球共享的。我认为只有当我们管理队列时才会出现这种情况,即

queue = manager.Queue()

谁能帮我理解一下?

在 Unix 中,子进程是用 fork() 创建的。

在Windows中,子进程由invoking the same script with special arguments创建。

这两种情况,子进程中可能存在q变量,因为它继承了状态,或者因为相关代码在执行到worker函数之前有运行

但这还不够。进程之间需要设置IPC,以发挥通信通道的作用。否则,它只是一个普通的本地对象。

如有疑问,请参阅 the official documentation,这是权威的信息来源,通常质量卓越。 对于 multiprocessing,坚持文档 尤其 很重要,因为由于其古怪的性质,各种事情可能看起来有效,但会以不可预测的方式中断。