Я посылаю простые объекты между процессами, используя каналы с модулем многопроцессорности Python. В документации указано, что если труба была закрыта, вызов pipe.recv() должен поднять EOFError. Вместо этого моя программа просто блокирует recv() и никогда не обнаруживает, что канал закрыт.
Пример:
import multiprocessing as m
def fn(pipe):
print "recv:", pipe.recv()
print "recv:", pipe.recv()
if __name__ == '__main__':
p1, p2 = m.Pipe()
pr = m.Process(target=fn, args=(p2,))
pr.start()
p1.send(1)
p1.close() ## should generate EOFError in remote process
И результат выглядит следующим образом:
recv: 1
<blocks here>
Может ли кто-нибудь сказать мне, что я делаю неправильно? У меня есть эта проблема для Linux и windows/cygwin, но not для Windows Python.