Deadlock em leitura / espera [fechado]

1

Meus deadlocks de processo. master é assim:

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 é algo como isto:

l = list()
for line in sys.stdin:
   l.append(line)
sys.stdout.write(str(len(l)))
  • strace -p PID_master mostra que master está preso em wait4(PID_child,...) .
  • strate -p PID_child mostra que child está preso em read(0,...) .

Como isso pode ser ?! Eu fiz close o stdin , por que child ainda está lendo?!

    
por sds 03.08.2015 / 15:12

1 resposta

1

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)))

Executando:

$ python parent.py 
  99999

Parece que isso funciona bem, então o problema deve estar em outro lugar.

    
por 03.08.2015 / 17:41