首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向正在运行的进程添加新队列

向正在运行的进程添加新队列
EN

Stack Overflow用户
提问于 2020-05-17 04:45:17
回答 2查看 33关注 0票数 1

如果我要创建两个进程,我可以先创建一个队列,然后将其传递给每个进程,如下所示:

代码语言:javascript
复制
def do_something(q):
    # queue passed as q

qu = multiprocessing.Queue()

p1 = multiprocessing.Process(target=do_something, args=(qu, ))
p2 = multiprocessing.Process(target=do_something, args=(qu, ))

p1.start()
p2.start()

然后,进程可以使用队列相互通信。

我如何添加第三个也需要与之通信的进程p3,比如p1?我可以创建一个新队列并将其传递给p3,但是如何让p1知道该队列并使用它与p1通信呢?注意: p1将与p2和p3独立通信。

谢谢,

朱利安

EN

回答 2

Stack Overflow用户

发布于 2020-05-17 13:52:31

我想我现在明白了,为了让进程进行通信,必须在进程启动时为它们提供队列。尝试以其他方式生成消息:

“队列对象只能通过继承在进程之间共享”

也就是说,你不能以任何方式给已经在运行的进程一个新的队列。这是有意义的,因为操作系统需要将进程链接到队列。仅仅传入一个新的队列不会做到这一点。

票数 0
EN

Stack Overflow用户

发布于 2020-05-17 15:08:13

使用Manager而不是Queue

例如,您可以创建一个包含dict的管理器,其中键是接收进程的pid (或任何其他惟一标识符),值是消息的list

将此字典传递给每个进程,然后它们可以通过将其附加到相关列表来使用它向所有其他进程发送消息。为了读取消息,流程simple使用自己的ID访问dict项,并将消息从列表中弹出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61843313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档