Python-对多个进程使用相同的duplex Pipe()

Python-对多个进程使用相同的duplex Pipe(),python,multiprocessing,Python,Multiprocessing,我有两个进程:proc_a、proc_b,我希望proc_a的返回值等于data\u new的值。 这是可能的还是我必须使用多个管道 if __name__ == '__main__': parent, child = Pipe() p1 = Process(target=proc_a, args=(parent, child,)) p2 = Process(target=proc_b, args=(parent, child,)) p1.start()

我有两个进程:proc_a、proc_b,我希望proc_a返回值等于
data\u new
的值。 这是可能的还是我必须使用多个管道

if __name__ == '__main__':

    parent, child = Pipe()
    p1 = Process(target=proc_a, args=(parent, child,))
    p2 = Process(target=proc_b, args=(parent, child,))

    p1.start()
    p2.start()
    p1.join()
    p2.join()
proc_a()
proc_b()
上:


由于管道是双向(双工)的,因此只能使用一个管道来解决此问题。 但您不能将管道的两端都发送到两个进程

见此:

请注意,如果两个进程(或线程)同时尝试读取或写入管道的同一端,管道中的数据可能会损坏。当然,同时使用管道不同端的进程没有损坏的风险

此代码工作并打印
2

from multiprocessing import Pipe, Process

def proc_a(pipe):
    data = 1
    pipe.send(data)
    result = pipe.recv()
    print(result)

def proc_b(pipe):
    data = pipe.recv()
    data_new = data + 1 # Sample change 
    pipe.send(data_new)

if __name__ == '__main__':
    parent, child = Pipe()
    p1 = Process(target=proc_a, args=(parent,))
    p2 = Process(target=proc_b, args=(child,))

    p1.start()
    p2.start()
    p1.join()
    p2.join()
请注意,
proc_a
return
不起任何作用,如果您需要在父进程中使用返回值,请查看

from multiprocessing import Pipe, Process

def proc_a(pipe):
    data = 1
    pipe.send(data)
    result = pipe.recv()
    print(result)

def proc_b(pipe):
    data = pipe.recv()
    data_new = data + 1 # Sample change 
    pipe.send(data_new)

if __name__ == '__main__':
    parent, child = Pipe()
    p1 = Process(target=proc_a, args=(parent,))
    p2 = Process(target=proc_b, args=(child,))

    p1.start()
    p2.start()
    p1.join()
    p2.join()