读取/等待死锁

读取/等待死锁

我的进程陷入僵局。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显示卡masterwait4(PID_child,...).
  • strate -p PID_child显示卡childread(0,...).

怎么可能?! 我做了closestdin为什么还在child读它?!

答案1

父级.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()

儿童.py

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

运行它:

$ python parent.py 
  99999

看起来这工作正常,所以问题一定是在其他地方。

相关内容