Python多处理队列内存管理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python多处理队列内存管理相关的知识,希望对你有一定的参考价值。
说我有Main
进程和2个额外的进程A
和B
。在这个程序中,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()
鉴于Queue q
是在Main进程中创建的,数据是否像这样流动?
A => Main => B
如果是这样,有没有办法在Queue
上初始化B
并传递给A
,以便数据直接从A
跳到B
跳过Main
?
答案
鉴于队列q是在主进程中创建的,数据是否像这样流动?
A => Main => B
没有。正如the docs所解释的那样,Queue
只是围绕Pipe
的自动同步包装器。当你把Queue
传给一个孩子时,你只是传递了Pipe
和一些锁。
而Pipe
只是一个操作系统管道的包装器。当你将Pipe
传递给一个孩子时,你只需传递管道的文件描述符/句柄。
忽略锁定,进程A基本上只是写入管道,进程B只是从中读取。
锁确实使事情变得更复杂(也可能意味着进程A旋转隐藏的后台线程),但它们仍然不涉及主进程。
除非主进程调用队列上的方法,否则它根本与该队列无关。
以上是关于Python多处理队列内存管理的主要内容,如果未能解决你的问题,请参考以下文章