Почему мы должны дублировать и закрыть оригинальный файл здесь? - PullRequest
3 голосов
/ 20 марта 2020

Я сейчас читаю многопроцессорный код Python 2.7. Я запутался в реализации connection.Pipe .

. Он использует следующий код для создания дуплексного канала.

s1, s2 = socket.socketpair()
s1.setblocking(True)
s2.setblocking(True)
c1 = _multiprocessing.Connection(os.dup(s1.fileno()))
c2 = _multiprocessing.Connection(os.dup(s2.fileno()))
s1.close()
s2.close()

Но зачем нам сначала dup s1 и s2 fileno и закрыть их вместо того, чтобы использовать их напрямую?

Я думаю, что это весьма отличается от следующей реализации в C, которая закрывает only parent для дочернего процесса (и child на родительском процессе) после fork называется.

...