Общие варианты использования для рассола в Python - программирование
Подтвердить что ты не робот

Общие варианты использования для рассола в Python

Я просмотрел документацию pickle, но я не понимаю, где рассол полезен.

Каковы некоторые общие случаи использования для рассола?

4b9b3361

Ответ 1

Некоторые из применений, с которыми я столкнулся:

1) сохранение данных состояния программы на диск, чтобы он мог продолжать, когда он был остановлен при перезапуске (сохранение)

2) отправка данных python по TCP-соединению в многоядерной или распределенной системе (сортировка)

3) сохранение объектов python в базе данных

4) преобразование произвольного объекта python в строку, чтобы он мог использоваться как ключ словаря (например, для кеширования и memoization).

Есть некоторые проблемы с последним - два одинаковых объекта могут быть маринованными и привести к разным строкам - или даже один и тот же объект, маринованный дважды, может иметь разные представления. Это связано с тем, что рассол может содержать информацию о количестве ссылок.

Ответ 2

Минимальный пример в кругоходе.

>>> 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

Я лично видел несколько примеров травильных объектов, отправляемых по сети в качестве простого в использовании протокола передачи сети.

Ответ 3

Травление абсолютно необходимо для распределенных и параллельных вычислений.

Предположим, что вы хотите выполнить параллельное отображение карты с помощью multiprocessing (или между узлами кластера с pyina), тогда вам нужно чтобы убедиться, что функция, которую вы хотите сопоставить по параллельным ресурсам, будет размножаться. Если он не раскалывается, вы не можете отправить его другим ресурсам на другой процесс, компьютер и т.д. Также см. здесь для хорошего пример.

Для этого я использую dill, который может сериализовать почти что угодно в python. У Dill также есть несколько хороших инструментов, помогающих понять, что приводит к сбою вашего травления, когда ваш код выходит из строя.

И да, люди используют сбор, чтобы сохранить состояние вычисления, или ваш ipython сеанс или что-то еще.

Ответ 4

Я использовал его в одном из моих проектов. Если приложение было завершено во время его работы (оно выполняло длительную задачу и обрабатывало множество данных), мне нужно было сохранить всю структуру данных и перезагрузить ее после повторного запуска приложения. Я использовал cPickle для этого, так как скорость была важной вещью, а размер данных был действительно большим.

Ответ 5

Для новичка (как в случае со мной) очень сложно понять, почему использовать рассол в первую очередь при чтении официальной документации . Возможно, потому, что документы подразумевают, что вы уже знаете всю цель сериализации. Только после прочтения общее описание сериализации я понял причину этого модуля и его общие варианты использования. Также широкое объяснение сериализации без учета конкретного языка программирования может помочь: fooobar.com/questions/59637/..., Что такое сериализация?, fooobar.com/questions/59638/...

Ответ 6

Чтобы добавить пример реального мира: Sphinx инструмент документации для Python использует pickle для кэширования анализируемых документов и перекрестных ссылок между документами, чтобы ускорить последующие сборки документации.

Ответ 7

Я могу сказать вам, для каких целей я использую его, и видел, как он использовался для:

  • Игровой профиль сохраняет
  • Данные игры сохраняются как жизнь и здоровье
  • Предыдущие записи о числах, введенных в программу

Это те, которые я использую, по крайней мере,

Ответ 8

Я использую травление во время веб-ломания одного из веб-сайтов в то время, когда я хочу хранить более 8000 тыс. URL-адресов и хочу обрабатывать их как можно быстрее, поэтому я использую травление, потому что его качество вывода очень велико.

вы можете легко дойти до URL-адреса и где вы остановите даже ключевое слово каталога заданий, также очень быстро извлекайте детали URL-адреса для возобновления процесса.

Ответ 9

Pickle похож на "Сохранить как.." и "Открыть.." для ваших структур данных и классов. Скажем, я хочу сохранить свои структуры данных, чтобы они сохранялись между прогонами программы.

Сохранение:

with open("save.p", "wb") as f:    
    pickle.dump(myStuff, f)        

Загрузка:

try:
    with open("save.p", "rb") as f:
        myStuff = pickle.load(f)
except:
    myStuff = defaultdict(dict)

Теперь мне не нужно снова строить myStuff с нуля, и я могу просто выбрать (le), с которого я остановился.