Почему pipe.close () не вызывает EOFError во время pipe.recv () в многопроцессорной обработке python?

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

16
задан Luke 3 July 2011 в 17:30
поделиться