Има ли пиклер с бележка, която не изисква файл

Имаме интересен случай на използване на Pickler в Python. Ние извършваме мултипроцесиране с обекти, които имат препратки към обекти.

В този въпрос за ецване на обекти-членове можете да видите, че Pickler използва своята бележка, за да зареди вместо това само оригиналния обект за изграждане на нов обект. Има ли някакъв начин да се използва Pickler с неговата бележка без Pickling към файл?

използвайте пример: (A, B, C всички имат интелигентен хеш и eq)

  1. Главният отделя обект A с подобект B и изпраща A към отделен процес
  2. Дъщерният процес връща избран обект C, който също може да има обект B
  3. Капитанът премахва C и той е достатъчно интелигентен, за да посочи B и да не прави копие

Какво ще кажете да направите всичко това с cpickle?


person rhaskett    schedule 16.05.2013    source източник
comment
Като вид свързан въпрос достатъчно умен ли е Pickler в бележката си, за да се справя бързо с обекти-членове? Ако мариновам 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
Проверете теста във въпроса, към който давам връзка. Dump и load ще създават нови обекти при зареждане. StringIO е интересен, но нека си поиграя с това. - person rhaskett; 17.05.2013