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

时间:2017-04-13 19:18:36

标签: python python-multiprocessing

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

p = Process(target=f, args=(q,)),
相反,似乎它们是全球共享的。我认为这只是我们有管理队列的情况,即

queue = manager.Queue()

有人可以帮助我理解这个吗?

1 个答案:

答案 0 :(得分:2)

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

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

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

但这还不够。需要在流程之间建立IPC以发挥其作为通信渠道的作用。否则,它只是一个常规的本地对象。

如有疑问,请参阅the official documentation,这是权威的信息来源,通常质量非常好。 使用multiprocessing时,特别对于坚持使用文档很重要,因为由于其古怪的性质,各种各样的东西似乎可以工作但是以不可预测的方式破解。