Python 多处理队列内存管理



假设我有Main进程和另外 2 个进程AB。在这个程序中,A应该向B发送数据。如果我们有一些这样的代码:

from multiprocessing import Process, Queue
def process_a(iterable, q):
for x in iterable:
q.put(x)
def process_b(q):
while some_condition():
x = q.get()

iterable = some_iterable()
q = Queue()
pa = Process(target=process_a, args=(iterable, q))
pb = Process(target=process_b, args=(q,))
pa.start()
pb.start()
pa.join()
pb.join()

假设队列q是在主进程中创建的,数据是否像这样流动?

A => Main => B

如果是这样,有没有办法在B上初始化Queue并传递给A,以便数据直接从A转到B跳过Main

给定队列 q 是在 Main 进程中创建的,数据是否像这样流动?

A => Main => B

不。如文档中所述,Queue只是围绕Pipe的自动同步包装器。当你把Queue传给一个孩子时,你只是在传递那个Pipe和一些锁。

Pipe只是操作系统管道的包装器。当您将Pipe传递给子项时,您只是传递管道的文件描述符/句柄。

忽略锁,进程 A 基本上只是写入管道,进程 B 只是从中读取。

锁确实使事情变得更加复杂(也可能意味着进程 A 启动了一个隐藏的背景线程(,但它们仍然根本不涉及主进程。

除非主进程在队列上调用方法,否则它与该队列完全无关。

相关内容

  • 没有找到相关文章