This is not what Michele suggested. You are still storing the entire
record.

On Jan 3, 12:22 pm, David Zejda <[email protected]> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Dear Massimo,
>
> thank you for the reply, but Michele's advice makes no difference.
>
> I just noticed that even this one leads to "the leak":
>
>     class Blah():
>         def __init__(self):
>             pass
>
>     def blah2():
>         return Blah()
>
>     p = cache.ram('blahblah',blah2,time_expire=30)
>
> Since I avoid storing objects of classes declared in model or
> controllers I do not have problems. But still I do not understand why
> when I store such object in cache, whole copy of db model goes into
> memory. IMO if there is no solution for the behaviour, at least the
> danger should be emphasized in cache docs, because I doubt that anybody
> would anticipate it.
>
> Wising you a nice day!
> David
>
>
>
> mdipierro wrote:
> > yes but you are not following Michele's advice. If you cache a record
> > or a an object like a reference, you are storing in ram of copy db
> > (the leak). You should cache values or dictionaries. As long as those
> > values are not reference fields there should be no leaks.
>
> > I am not sure the term leak is appropriate here. When you cache you
> > store something and storage takes space, until you clear cache. The
> > bigger the object you cache, the more space it takes.
>
> > On Jan 3, 4:21 am, David Zejda <[email protected]> wrote:
> > Hi,
>
> > nick is not reference field. To make it sure that the issue is not
> > dependent on the field definition I checked it with as simple Field as
> > possible:
>
> > Field('trustworthiness', 'double', default=0),
>
> > defined in my model and added conversion to str:
>
> >     class Blah():
> >         def __init__(self):
> >             self.nick = str(db.person[1].trustworthiness)
>
> >     p = cache.ram('blahblah',Blah,time_expire=30)
>
> > Also,
>
> > def blah_f():
> >      return Blah()
>
> > makes no change, leads to the same leak.
>
> > The leak appears regardless to the place of the declaration of Blah
> > class. I tried to declare it in top level of model, in controller, and
> > inside function of controller, no difference.
>
> > It is possible that this IMO weird behaviour is related to another issue
> > which teased me months ago:
>
> >http://www.mail-archive.com/[email protected]/msg34333.html
>
> > With regards,
> > David
>
> > mdipierro wrote:
> >>>> It depends on whether nick is a reference field.
> >>>> On Jan 2, 5:31 pm, Michele Comitini <[email protected]>
> >>>> wrote:
> >>>>> what if you do this?
> >>>>> class Blah():
> >>>>>     def __init__(self):
> >>>>>         self.nick = db.person[1].nick
> >>>>> def blah_f():
> >>>>>     return Blah()
> >>>>>  p = cache.ram('blahblah', blah_f,time_expire=30)
> >>>>> 2011/1/2 David Zejda <[email protected]>:
>
> - --
> David Zejda, Open-IT cz
> web development & serviceshttp://www.o-it.info
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.9 (GNU/Linux)
> Comment: Using GnuPG with Mozilla -http://enigmail.mozdev.org
>
> iEYEARECAAYFAk0iE/4ACgkQ3oCkkciamVHfNwCdFkpF3okgulfxi7qV1EZA0P1/
> VhAAn0Rd3EXTwwn+fttzIvc83K8ri8bK
> =3lwE
> -----END PGP SIGNATURE-----

Reply via email to