Я сейчас читаю многопроцессорный код 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
называется.