Python多处理队列内存管理

Cri*_*cia 2 python queue multiprocessing

说我有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()
Run Code Online (Sandbox Code Playgroud)

鉴于Queue q是在Main进程中创建的,数据是否像这样流动?

A => Main => B
Run Code Online (Sandbox Code Playgroud)

如果是这样,有没有办法有一个Queue初始化上B,并传递给A这样的数据直接从云AB跳绳Main

aba*_*ert 5

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

A => Main => B
Run Code Online (Sandbox Code Playgroud)

不,如文档所述,a Queue只是一个自动同步包装器Pipe.当你传给一个Queue孩子时,你只是传递了Pipe一些锁.

Pipe仅仅是围绕操作系统管的包装.当你传递Pipe给一个孩子时,你只是传递管道的文件描述符/句柄.

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

锁确实使事情变得更复杂(也可能意味着进程A旋转隐藏的后台线程),但它们仍然不涉及主进程.

除非主进程调用队列上的方法,否则它根本与该队列无关.