Какой лучший способ отправить объект по сети на Python? - PullRequest
10 голосов
/ 07 июля 2010

Мне нужно отправлять объекты по сети.Я собираюсь использовать Twisted, и я только начал искать документацию для него.

Насколько я знаю, единственный способ реализации сокетов в python - это текст.Итак, как бы я отправил объект, используя строки?Соленый огурец?Или есть что-то лучше?

1 Ответ

19 голосов
/ 07 июля 2010

Наиболее распространенной сериализацией между конечными точками Python является формат pickle (в Python 2.any обязательно используйте модуль cPickle и протокол -1 aka pickle.HIGHEST_PROTOCOL; если вам нужна совместимость между Python 2. любой и Python 3. любой нужно больше заботиться). Для особо простых объектов модуль marshal иногда может быть быстрее и компактнее. Для взаимодействия с конечными точками, отличными от Python, json может быть наилучшим (или вы можете использовать xml для определения или принятия других существующих форматов сериализации), но они, вероятно, будут более объемными и медленными для форматирования и анализа.

Насколько я знаю, единственный способ питона реализует сокеты через текст.

Нет, все строки байтов приветствуются! -) Вас может смущать тот факт, что в Python 2 «нормальная строка» на самом деле представляет собой строку байтов («text» будет типом unicode); Python 3 исправляет ситуацию и использует Unicode для «обычных строк» ​​и определенный тип байтовых строк для строк байтов.

Строки байтов - это общий способ, которым любой язык будет выполнять любую форму сериализации и десериализации в соответствии с тем или иным протоколом - такие байтовые потоки или большие двоичные объекты могут передаваться в сети, базы данных, простые файлы и т. Д. И т. Д. конечно.

Twisted предлагает свой собственный формат сериализации, как часть twisted.spread - он в основном предназначен для использования с Perspective Broker (PB), но вы можете использовать его для своих собственных целей, если не хотите использовать PB по какой-то особой причине. Документы для части сериализации, twisted.spread.jelly, здесь , и они хорошо суммируют цели формата ...:

Постоянство на основе S-выражения объекты Python.

Это очень похоже на Соленый огурец; тем не менее, главная цель мариновать кажется, эффективность (как в космосе и время); основные цели желе являются безопасность, удобочитаемость и переносимость в другие среды.

Если вы заботитесь больше о безопасности, удобочитаемости и портативности, чем о скорости и компактности, тогда желе действительно может вам пригодиться.

...