Я посмотрел документацию pickle , но я не понимаю, где полезно использовать pickle.
Каковы некоторые распространенные варианты использования для pickle? pickle?
Некоторые варианты использования, с которыми я столкнулся:
1) сохранение данных о состоянии программы на диск, чтобы она могла продолжить работу с того места, где была остановлена при перезапуске (постоянство)
2) отправка данных Python через TCP-соединение в многоядерной или распределенной системе (маршаллинг)
3) хранение объектов Python в базе данных
4) преобразование произвольного объекта Python в строку, чтобы его можно было использовать в качестве ключ словаря (например, для кеширования и запоминания).
Есть некоторые проблемы с последним - два идентичных объекта могут быть маринованы и в результате получатся разные строки - или даже один и тот же объект, дважды маринованный, может иметь разные представления. Это потому, что рассол может включать информацию о счетчике ссылок.
Подчеркнем комментарий @lunaryorn - вам никогда не следует извлекать строку из ненадежного источника, поскольку тщательно созданный pickle может выполнить произвольный код в вашей системе. Например, см. https://blog.nelhage.com/2011/03/exploiting-pickle/
Я использовал его в одном из своих проектов.Если приложение было прервано во время работы (оно выполняло длительную задачу и обрабатывало много данных), мне нужно было сохранить всю структуру данных и перезагрузить ее после повторного запуска приложения. Я использовал для этого cPickle, так как скорость имела решающее значение, а размер данных был действительно большим.
Пример минимального пути туда и обратно ..
>>> import pickle
>>> a = Anon()
>>> a.foo = 'bar'
>>> pickled = pickle.dumps(a)
>>> unpickled = pickle.loads(pickled)
>>> unpickled.foo
'bar'
Редактировать: но что касается вопроса о реальных примерах травления, возможно наиболее продвинутое использование травления ( вам придется копаться в источнике довольно глубоко) - это ZODB: http://svn.zope.org/
В противном случае PyPI упоминает несколько: http://pypi.python.org/pypi?:action=search&term=pickle&submit=search
Я лично видел несколько примеров отправки по сети маринованных объектов в качестве простого в использовании протокола сетевой передачи.