python persistence
castironpi at gmail.com
castironpi at gmail.com
Tue Apr 1 16:21:17 EDT 2008
On Apr 1, 11:34 am, "Gabriel Genellina" <gagsl-... at yahoo.com.ar>
wrote:
> En Tue, 01 Apr 2008 08:47:33 -0300, <castiro... at gmail.com> escribió:
>
> >> >>>> c['0']= type('None',(),{})
> >> > Traceback (most recent call last):
> >> > pickle.PicklingError: Can't pickle <class '__main__.None'>: it's not
> >> > found as __main__.None
>
> >> Don't do that then. Or use the available pickle hooks to customize how
> >> such classes may be pickled. All persistence mechanisms have
> >> limitations.
>
> > I don't see a problem with that; except that binaries come from
> > disks. You could have a Python session that runs entirely on disks +
> > the ALU.
>
> (ALU? Do you mean CPU?) I don't understand this. Most programs are read
> from disk. Most data is read from disk.
>
> > I want to know if any, and correct me here, simple
> > modification can store live objects. I call a.append(it) and the
> > memory update takes place on disk instead.
>
> Using ZODB, a.append(it) would mark `a` as dirty. When you latter commit
> the transaction, it is stored back on disk.
>
> > If you require that all objects referenced by on-disk objects be on-
> > disk, that's an easy workaround.
>
> ZODB already does that.
It's pretty close, but the database connection can get bulky. If you
had:
_______________________
| ______________________
|File | PyOb1 | PyOb2 | .. |
| |_______|_______|______|
|_______________________
on disk, updating the reference counts and attributes would take a
long time, but it's just right for some core applications.
Strictly, I'm not in the "real" programming world, so if it's just a
few free steps to a database then I'm speculating. If it's not, then
writing database code needlessly complicates programs in some cases.
A default implementation might even take an explicit destroy
statement, essentially being a run-time swap file or random-access
pickles.
A possibility is to launch a manager in a separate process, so authors
don't have to bother with writeback. I'm actually almost looking at
off-loading protocols on this one. Cache is guaranteed to be up to
date, so cache a file in memory, and manipulate it so it has Python
bits. The object comes to survive the program. Call stack is still
in volatile.
> Using ZODB, a.append(it) would mark `a` as dirty. When you latter commit
> the transaction, it is stored back on disk.
Python changes are committed on line. ZODB does -not- do that. A
pretty close change would be:
Open file
Interpret file as generator, halted at yield but started,
Call send and next
What does the code for that look like?
More information about the Python-list
mailing list