Дочерний процесс может отправлять сколько угодно данных, а вот родительский один раз, потом программа останавливается и чего-то ждёт. Канал открыт, не понятно почему так происходит
Код:
from multiprocessing import Process, Pipe, current_process
from multiprocessing.connection import wait
def foo(w, i):
print("w -> 1234")
w.send("1234")
readers = []
readers.append(w)
while readers:
for r in wait(readers):
try:
msg = r.recv()
except EOFError:
print("w: error")
readers.remove(r)
else:
if(msg == "1234"):
w.send("4321")
print("1234 -> w -> 4321")
if(msg == "4321"):
print("4321 -> w")
print("w: close")
if __name__ == '__main__':
readers = []
r, w = Pipe(duplex=True)
readers.append(r)
p = Process(target=foo, args=(w, 1))
p.start()
w.close()
while readers:
for r in wait(readers):
try:
msg = r.recv()
if(msg == "1234"):
r.send("1234")
print("1234 -> r -> 1234")
if(msg == "4321"):
r.send("r: 4321")
print("4321 -> r -> 4321")
except EOFError:
print("r: error")
readers.remove(r)
Вывод сейчас такой:
w -> 1234
1234 -> r -> 1234
1234 -> w -> 4321
4321 -> r -> 4321
Вот такой должен быть:
w -> 1234
1234 -> r -> 1234
1234 -> w -> 4321
4321 -> r -> 4321
4321 -> w
w: close