Python os.pipe против многопроцессорной обработки.Pipe
Недавно я изучаю инструменты параллельного программирования на Python. И вот два основных различия между os.pipe и multiprocessing.Pipe.(Несмотря на то, что они используются)
- os.pipe является однонаправленным, многопроцессорным. Pipe является двунаправленным;
- Когда вы помещаете вещи в трубу / получаете вещи из трубы, 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
объекты могут отправлять / получать любые объекты для выбора и автоматически обрабатывают процесс выбора / удаления, а не просто обрабатывают байты. Они способны быть как двунаправленными, так и однонаправленными.