Python os.pipe против многопроцессорной обработки.Pipe

Недавно я изучаю инструменты параллельного программирования на Python. И вот два основных различия между os.pipe и multiprocessing.Pipe.(Несмотря на то, что они используются)

  1. os.pipe является однонаправленным, многопроцессорным. Pipe является двунаправленным;
  2. Когда вы помещаете вещи в трубу / получаете вещи из трубы, os.pipe использует кодирование / декодирование, в то время как мультипроцессирование. Pipe использует pickle / unpickle

Я хочу знать, правильное ли мое понимание, и есть ли другая разница? Спасибо.

1 ответ

Решение

Я верю, что все, что вы сказали, правильно.

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

multiprocessing.Pipe объекты гораздо более высокого уровня интерфейса, реализованные с использованием multiprocessing.Connection объекты. В Linux они фактически основаны на сокетах POSIX, а не на каналах POSIX. В Windows они построены с использованием CreateNamedPipe API. Как вы заметили, multiprocessing.Connection объекты могут отправлять / получать любые объекты для выбора и автоматически обрабатывают процесс выбора / удаления, а не просто обрабатывают байты. Они способны быть как двунаправленными, так и однонаправленными.

Другие вопросы по тегам