Это очень разные вещи, с совершенно другим поведением.
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
, но, вероятно, все еще полезны.)