我是编码的新手。想知道是否可以多次使用Pipe()进行进程间通信。如果是,我在下面的代码中缺少什么?如果不是,那么一个管道不能多次使用的原因是什么。
import multiprocessing
def f1(pipe):
r, w = pipe
r.close()
for n in range(10):
w.send(n)
def f2(pipe):
r, w = pipe
w.close()
while True:
try:
item = r.recv()
except EOFError:
break
print("Item received by f2:", item)
def f3(pipe):
r, w = pipe
r.close()
for n in range(10, 21):
w.send(n)
def f4(pipe):
r, w = pipe
w.close()
while True:
try:
item = r.recv()
except EOFError:
break
print("Item received by f2:", item)
if __name__ == '__main__':
(r, w) = multiprocessing.Pipe()
p1 = multiprocessing.Process(target=f1, args=((r, w),))
p2 = multiprocessing.Process(target=f2, args=((r, w),))
p1.start()
p2.start()
w.close()
p1.join()
p2.join()
#(r, w) = multiprocessing.Pipe()
p3 = multiprocessing.Process(target=f3, args=((r, w),))
p4 = multiprocessing.Process(target=f4, args=((r, w),))
p3.start()
p4.start()
w.close()
p3.join()
p4.join()
答案 0 :(得分:2)
如果你现在还没弄明白,问题是你要关闭两个连接对象(你称之为“r”和“w”)。一旦你关闭它们就不能再使用它们了。只需注释掉 close 语句即可。如果要手动关闭它们,请在所有 join 语句后执行此操作。
我也会改变f2:
while r.poll(1):
try:
...
如果它不接收超过一秒的数据,它将退出循环。