Ответ 1
Я считаю, что все, что вы сказали, верно.
В Linux os.pipe
- это просто интерфейс Python для доступа к традиционным POSIX-каналам. В Windows это реализовано с помощью CreatePipe
. Когда вы это называете, вы возвращаете два обычных дескриптора файла. Он однонаправлен, и вы просто пишете байты на одном конце, которые буферизуются ядром, пока кто-то не читает с другой стороны. Это довольно низкий уровень, по крайней мере, по стандартам Python.
multiprocessing.Pipe
объекты - это гораздо более высокоуровневый интерфейс, реализованный с использованием объектов multiprocessing.Connection
. В Linux они фактически построены поверх сокетов POSIX, а не POSIX. В Windows они построены с использованием API CreateNamedPipe
. Как вы отметили, объекты multiprocessing.Connection
могут отправлять/получать любой соблазнительный объект и автоматически обрабатывать процесс травления/распиловки, а не просто обрабатывать байты. Они способны быть двунаправленными и однонаправленными.