Сериализация Python-зачем мариновать?
Я понял, что Python pickling-это способ "хранить" объект Python таким образом, чтобы он уважал объектное Программирование, отличное от вывода, записанного в txt - файле или БД.
У вас есть более подробная информация или ссылки на следующие пункты:
- где хранятся маринованные объекты?
- почему маринование сохраняет представление объекта больше, чем, скажем, хранение в БД?
- могу ли я получить маринованные объекты из одного сеанса оболочки Python к другому?
- есть ли у вас значительные примеры, когда сериализация полезна?
- сериализация с рассолом подразумевает сжатие данных?
другими словами, Я ищу документ по маринованию - Python.doc объясняет, как реализовать pickle, но, похоже, не погружается в детали об использовании и необходимости сериализации.
3 ответов:
маринование-это способ преобразования объекта python (list, dict и т. д.) в поток символов. Идея заключается в том, что этот поток символов содержит всю информацию, необходимую для восстановления объекта в другом скрипте python.
Что касается того, где хранится маринованная информация, обычно можно было бы сделать:
with open('filename', 'wb') as f: var = {1 : 'a' , 2 : 'b'} pickle.dump(var, f)что бы хранить маринованную версию нашего
varдикт в файле 'filename'. Затем, в другом скрипте, вы можете загрузить из этого файла в переменную и словарь будет воссоздан:with open('filename','rb') as f: var = pickle.load(f)другое использование для маринования, если вам нужно передать этот словарь по сети (возможно, с сокетами или что-то еще.) Сначала вам нужно преобразовать его в поток символов, а затем вы можете отправить его через соединение сокета.
кроме того, нет никакого "сжатия", чтобы говорить here...it это просто способ преобразования из одного представления (в ОЗУ) в другое (в "текст").
About.com имеет хорошее введение маринование здесь.
маринование абсолютно необходимо для распределенных и параллельных вычислений.
скажем, вы хотели сделать параллельную карту-уменьшить с
multiprocessing(или через узлы кластера с pyina), то вам нужно убедиться, что функция, которую вы хотите отобразить через параллельные ресурсы будет мариновать. Если он не маринуется, вы не можете отправить его на другие ресурсы на другом процессе, компьютере и т. д. Также смотрите здесь для наглядного примера.чтобы сделать это, я используйте укроп, который может сериализовать почти все в python. Укроп также имеет хорошие инструменты для того, чтобы помочь вам понять, что вызывает сбой вашего маринования, когда ваш код терпит неудачу.
и, да, люди используют сбор, чтобы сохранить состояние расчета, или ваш ipython сессия, или что угодно. Вы также можете расширить Pickler и UnPickler рассола, чтобы сделать сжатие с
bz2илиgzipЕсли хотите.
это своего рода сериализация. используйте cPickle это гораздо быстрее, чем рассол.
import pickle ##make Pickle File with open('pickles/corups.pickle', 'wb') as handle: pickle.dump(corpus, handle) #read pickle file with open('pickles/corups.pickle', 'rb') as handle: corpus = pickle.load(handle)
Comments