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
,坚持文档 尤其 很重要,因为由于其古怪的性质,各种事情可能看起来有效,但会以不可预测的方式中断。
我最近开始使用 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
,坚持文档 尤其 很重要,因为由于其古怪的性质,各种事情可能看起来有效,但会以不可预测的方式中断。