我最近开始使用Python多处理模块。我理解队列的解释,但最近我在https://pymotw.com/2/multiprocessing/communication.html上发现队列不需要作为参数传递给Proccess构造函数方法,例如。
p = Process(target=f, args=(q,)),
相反,似乎它们是全球共享的。我认为这只是我们有管理队列的情况,即
queue = manager.Queue()
有人可以帮助我理解这个吗?
答案 0 :(得分:2)
在Unix中,使用fork()
创建子进程。
在Windows中,子进程由invoking the same script with special arguments创建。
在这两种情况下,子进程中可能都有q
变量,因为它继承了状态,或者因为相关代码在执行到达worker函数之前已经运行。
但这还不够。需要在流程之间建立IPC以发挥其作为通信渠道的作用。否则,它只是一个常规的本地对象。
如有疑问,请参阅the official documentation,这是权威的信息来源,通常质量非常好。 使用multiprocessing
时,特别对于坚持使用文档很重要,因为由于其古怪的性质,各种各样的东西似乎可以工作但是以不可预测的方式破解。强>