Сериализует ли Python multiprocessing.connection? - PullRequest
2 голосов
/ 15 декабря 2011

Python's multiprocessing.connection позволяет использовать шаблон Listener-Client .Вы можете выбрать тип используемого сокета:

  • сокет TCP
  • сокет домена Unix
  • именованный канал Windows

делает connection сериализует \ выбирает сообщения во всех типах сокетов?Или последние два экономят время \ cpu, отправляя нативные объекты Python?

Ответы [ 2 ]

3 голосов
/ 23 октября 2012

Все каналы передачи, которые могут использоваться multiprocessing.Connection (различные типы розеток и труб), работают подобно потоку. Следовательно, объекты Python должны быть сериализованными / десериализованными (или закодированными / декодированными, если вы хотите так сказать) для передачи и приема по этим каналам.

Все типы соединений в многопроцессорном модуле имеют методы _ConnectionBase, в которых реализованы recv() и send(obj):

def send(self, obj):
    """Send a (picklable) object"""
    self._check_closed()
    self._check_writable()
    buf = io.BytesIO()
    ForkingPickler(buf, pickle.HIGHEST_PROTOCOL).dump(obj)
    self._send_bytes(buf.getbuffer())

def recv(self):
    """Receive a (picklable) object"""
    self._check_closed()
    self._check_readable()
    buf = self._recv_bytes()
    return pickle.loads(buf.getbuffer())

Здесь мы видим, что все объекты Python сериализуются с помощью pickle с использованием двоичного протокола перед передачей и десериализацией после получения. Фактическая отправка / прием выполняется в методах _send_bytes и _recv_bytes, которые реализуются по-разному для каждого типа транспортного канала.

Ссылка: https://github.com/schmir/python/blob/master/Lib/multiprocessing/connection.py

2 голосов
/ 15 декабря 2011

Необходима какая-то сериализация;отдельные процессы не могут совместно использовать объекты Python.

16.6.2.4.Объекты подключения

Объекты подключения позволяют отправлять и получать выбираемые объекты или строки.Их можно рассматривать как связанные с сообщениями сокеты.

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