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

Python 向正在运行的进程添加新队列,python,python-multiprocessing,Python,Python Multiprocessing,如果我要创建两个进程,我可以先创建一个队列并将其传递给每个进程,如下所示: 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(

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

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独立通信

谢谢


Julian

我想我现在明白了,为了让流程进行通信,必须在流程启动时为它们都提供队列。尝试执行其他操作会产生以下消息:

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


i、 e.您不能以任何方式向已在运行的进程提供新队列。这是有意义的,因为操作系统需要将进程链接到队列。仅仅传入一个新队列并不能做到这一点。

我想我现在明白了,为了让进程通信,它们必须在进程启动时都得到队列。尝试执行其他操作会产生以下消息:

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


i、 e.您不能以任何方式向已在运行的进程提供新队列。这是有意义的,因为操作系统需要将进程链接到队列。仅仅传入一个新的队列并不能做到这一点。

使用
管理器,而不是
队列

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


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

使用
管理器,而不是
队列

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

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