Я отправляю простые объекты между процессами, используя каналы с модулем многопроцессорности 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, но не с собственным Python для Windows.