[Zope-dev] _p_deactivate() and _v_ variables?
Casey Duncan
casey at zope.com
Mon Sep 29 09:30:52 EDT 2003
On Friday 26 September 2003 04:37 am, Toby Dickenson wrote:
> On Friday 26 September 2003 09:32, Chris Withers wrote:
> > Toby Dickenson wrote:
> > > On Thursday 25 September 2003 11:51, Chris Withers wrote:
> > >>Hmmm, does _p_deactivate() clear the contents of the object's _v_
> > >>variables?
> > >
> > > Yes
> >
> > Then given your earlier comment that _v_ variables are supposed to last at
> > least teh length of the request, John's idea of using _p_deactivate() to
> > reduce memory usage for large ZCatalog results sets could be seen as
> > playing with fire, right?
>
> He had code that would only deactivate objects at the end of a loop if they
> were not active at the start of the loop. Its not entirely safe, but I think
> it mitigates the most serious risks here.
>
> ZCatalog (and others) have used this same technique for a while.
It should be entirely safe so long as the application does not store
non-redundant data in _v_ variables. If the application does do this, then it
needs to register the object as changed in the transaction and override
__getstate__ so that the value of the _v_ variables are stored.
I would argue that a better plan would be to only use _v_ vars for completely
disposable data only. The application should expect that this values will be
gone at any random time, not just at transaction boundaries.
_p_deactivate is only effective if the object is in the "up-to-date" state. So
if by some chance the object was changed after being loaded from the catalog
results set, _p_deactivate() would do no harm.
-Casey
More information about the Zope-Dev
mailing list