Есть ли пиклер с заметкой, которая не требует файла

У нас есть интересный вариант использования Pickler в python. Мы выполняем многопроцессорную обработку объектов, которые имеют ссылки на объекты.

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

используйте пример: (A, B, C все имеют умный хэш и экв.)

  1. Мастер собирает объект A с подобъектом B и отправляет A в отдельный процесс.
  2. Дочерний процесс возвращает выбранный объект C, который также может иметь объект B.
  3. Мастер распаковывает C, и он достаточно умен, чтобы сослаться на B и не делать копию

Как насчет того, чтобы сделать все это с помощью cpickle?


person rhaskett    schedule 16.05.2013    source источник
comment
В качестве связанного с этим вопроса достаточно ли умен Пиклер в своем меморандуме, чтобы быстро справляться с объектами-членами? Если я мариную A с членом B и C с членом B, он маринует B дважды?   -  person rhaskett    schedule 17.05.2013


Ответы (1)


Существуют функции dumps и loads, использующие строки.

>>> from cPickle import dumps, loads
>>> d={'foo': 'bar'}
>>> dumps(d)
"(dp1\nS'foo'\np2\nS'bar'\np3\ns."
>>> loads(_)
{'foo': 'bar'}

Вы также можете использовать dump/load с объектом StringIO

>>> from cPickle import dump, load
>>> from cStringIO import StringIO
>>> S=StringIO()
>>> d={'foo': 'bar'}
>>> dump(d, S)
>>> S
<cStringIO.StringO object at 0x20c3960>
>>> S.seek(0)
>>> load(S)
{'foo': 'bar'}
person John La Rooy    schedule 16.05.2013
comment
Проверьте тест в вопросе, на который я ссылаюсь. Дамп и загрузка будут создавать новые объекты при загрузке. StringIO интересен, хотя позвольте мне поиграть с этим. - person rhaskett; 17.05.2013