Тупик при чтении / ожидании

Мое взаимоблокирование. master выглядит следующим образом:

 p=Popen(cmd, stdin=PIPE, stdout=PIPE) for ....: # a few million p.stdin.write(...) p.stdin.close() out = p.stdout.read() p.stdout.close() exitcode = p.wait() 

child выглядит примерно так:

 l = list() for line in sys.stdin: l.append(line) sys.stdout.write(str(len(l))) 
  • strace -p PID_master показывает, что master застрял в wait4(PID_child,...) .
  • strate -p PID_child показывает, что child застревает в read(0,...) .

Как это может быть?! Я close stdin , почему child все еще читает?

parent.py

 from subprocess import Popen, PIPE cmd = ["python", "child.py"] p=Popen(cmd, stdin=PIPE, stdout=PIPE) for i in range(1,100000): p.stdin.write("hello\n") p.stdin.close() out = p.stdout.read() p.stdout.close() print(out) exitcode = p.wait() 

child.py

 import sys l = list() for line in sys.stdin: l.append(line) sys.stdout.write(str(len(l))) 

Запуск:

 $ python parent.py 99999 

Похоже, это прекрасно работает, поэтому проблема должна быть где-то в другом месте.