如果我要创建两个进程,我可以先创建一个队列,然后将其传递给每个进程,如下所示:
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独立通信。
谢谢,
朱利安
发布于 2020-05-17 13:52:31
我想我现在明白了,为了让进程进行通信,必须在进程启动时为它们提供队列。尝试以其他方式生成消息:
“队列对象只能通过继承在进程之间共享”
也就是说,你不能以任何方式给已经在运行的进程一个新的队列。这是有意义的,因为操作系统需要将进程链接到队列。仅仅传入一个新的队列不会做到这一点。
发布于 2020-05-17 15:08:13
使用Manager而不是Queue。
例如,您可以创建一个包含dict的管理器,其中键是接收进程的pid (或任何其他惟一标识符),值是消息的list。
将此字典传递给每个进程,然后它们可以通过将其附加到相关列表来使用它向所有其他进程发送消息。为了读取消息,流程simple使用自己的ID访问dict项,并将消息从列表中弹出。
https://stackoverflow.com/questions/61843313
复制相似问题