viksnamax
@viksnamax
Aliens is here!

Почему в двунаправленном канале родитель может отправлять, только один раз данные?

Дочерний процесс может отправлять сколько угодно данных, а вот родительский один раз, потом программа останавливается и чего-то ждёт. Канал открыт, не понятно почему так происходит

Код:

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
  • Вопрос задан
  • 39 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы