Cri*_*cia 2 python queue multiprocessing
说我有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()
Run Code Online (Sandbox Code Playgroud)
鉴于Queue q
是在Main进程中创建的,数据是否像这样流动?
A => Main => B
Run Code Online (Sandbox Code Playgroud)
如果是这样,有没有办法有一个Queue
初始化上B
,并传递给A
这样的数据直接从云A
到B
跳绳Main
?
鉴于队列q是在主进程中创建的,数据是否像这样流动?
A => Main => B
Run Code Online (Sandbox Code Playgroud)
不,如文档中所述,a Queue
只是一个自动同步包装器Pipe
.当你传给一个Queue
孩子时,你只是传递了Pipe
一些锁.
而Pipe
仅仅是围绕操作系统管的包装.当你传递Pipe
给一个孩子时,你只是传递管道的文件描述符/句柄.
忽略锁定,进程A基本上只是写入管道,进程B只是从中读取.
锁确实使事情变得更复杂(也可能意味着进程A旋转隐藏的后台线程),但它们仍然不涉及主进程.
除非主进程调用队列上的方法,否则它根本与该队列无关.
归档时间: |
|
查看次数: |
358 次 |
最近记录: |