python多进程 共享 实例,在不同模块之间共享队列实例

博客探讨了Python的multiprocessing.Queue如何在父子进程中共享数据,强调了全局变量在没有父子关系的进程中无法共享。文章通过示例展示了两个独立启动的进程各自创建Queue,无法彼此共享。同时指出,多处理模块提供了工具来在相关联的进程中共享状态,而在没有这种关系的进程间共享状态则需要其他策略。
摘要由CSDN通过智能技术生成

一个multiprocessing.Queue在创建它的进程(我们称之为“父进程”)和由父进程创建的进程(称之为“子进程”)之间共享。在

以下是一些不具有此关系的进程的示例:$ python myprogram.py &

$ python myprogram.py &

shell是这两个孩子的父对象。但是,shell没有创建multiprocessing.Queue,因此它不会被两个子对象共享。相反,他们将各自创建自己的。这可能与他们的子女分享,但不能彼此分享。在

您可以很容易地观察到这种行为:

^{pr2}$

第二个进程从不从队列中读取任何内容。但是,如果给这两个进程提供父子关系。。。在$ cat queuedemo.py

from os import getpid

from multiprocessing import Queue

from multiprocessing.process import Process

q = Queue()

q.put(getpid())

def child():

print(getpid(), q.get())

p = Process(target=child)

p.start()

p.join()

exarkun@baryon:/tmp/queue$ python queuedemo.py

(28469, 28467)

exarkun@baryon:/tmp/queue$

请注意,q.get()调用成功,并且放入队列中的pid与获取队列的进程的pid不同。在

在某种程度上,这也扩展到具有父-子代和兄弟关系的进程。在

所以:全局变量仅在单个进程中共享

多处理模块提供了一些工具来在相互正确关联的进程之间共享状态。在

如果你想在没有这种关系的进程之间共享状态,还有很多其他的选择——最好的一个将更多地取决于你必须共享什么样的状态以及你的共享模式是什么样的(你的问题中都没有包含这两个选项)。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值