Python-对多个进程使用相同的duplex Pipe()
我有两个进程:proc_a、proc_b,我希望proc_a的返回值等于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()
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()