multiprocessing.Pipe () против .Queue () - PullRequest
0 голосов
/ 25 декабря 2018
import multiprocess as mp

В чем основные различия между mp.Pipe() и mp.Queue()?Они кажутся мне одинаковыми: в основном Pipe.recv() эквивалентно Queue.get(), а Pipe.send() - Queue.put().

1 Ответ

0 голосов
/ 26 декабря 2018

Это очень разные вещи, с совершенно другим поведением.

A Queue экземпляр имеет put, get, empty, full иразличные другие методы.Он имеет необязательный максимальный размер (количество предметов на самом деле).Любой может поставить или попасть в любую очередь.Он безопасен для обработки, поскольку обрабатывает все блокировки.

Функция Pipe - отметим, что это функция, а не экземпляр класса - возвращает два объекта типа Connection (это экземпляры классов).Эти два экземпляра связаны друг с другом.Соединение между ними может быть однодуплексным, т. Е. Вы можете отправлять только один и получать только на другом, или оно может быть полнодуплексным, т. Е. Все, что вы фактически отправляете на одном, принимается на другом.Два объекта имеют методы send, recv, send_bytes, recv_bytes, fileno и close.Методы отправки и получения используют код выбора для преобразования между объектами и байтами, поскольку фактическая передача данных осуществляется через байтовый поток.Объекты подключения не заблокированы и, следовательно, не безопасны для процесса.

Для передачи данных между процессами обычно используются эти Connection объекты: эта и общая память являютсябазовый механизм для всех межпроцессных коммуникаций в многопроцессорном коде.Queue экземпляры - это объекты гораздо более высокого уровня, которые в конечном итоге должны использовать Connection для отправки или получения байтового потока, представляющего объект, передаваемый по очереди.Таким образом, в этом смысле они делают то же самое, но это немного похоже на утверждение, что USB-кабель делает то же самое, что и то, что их соединяет.Обычно вы не хотите иметь дело с отдельными напряжениями на проводе: гораздо приятнее просто отправить или получить целый объект.(Эта аналогия немного слабая, потому что Connection экземпляры имеют send и recv, а также send_bytes и recv_bytes, но, вероятно, все еще полезны.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...