我有两个流程:proc_a,proc_b,我希望 proc_a 的返回等于data_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()
上:
def proc_a(parent, child):
data = somedata
child.send(data)
result = parent.recv()
return result
def proc_b(parent, child):
data = parent.recv()
data_new = data + 1 # Sample change
child.send(data_new)
答案 0 :(得分:0)
您只需一根管道就可以解决它,因为管道是双向的(双工)。 但你不能做的是将管道的两端发送到两个进程。
请参阅此section of the docs:
请注意,如果两个进程(或线程)同时尝试读取或写入管道的同一端,则管道中的数据可能会损坏。当然,同时使用管道不同端的进程不存在腐败风险。
此代码可以工作并打印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()
请注意,return
的{{1}}不执行任何操作,如果您需要在父进程中使用返回值,请查看this question