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]>: > > > -----BEGIN PGP SIGNED MESSAGE----- > > Hash: SHA1 > > > Finally I had enough time to find out, where is the main root of my > > memory leak. > > > Consider two scenarios: > > > 1. start web2py server > > > 2. execute controller function with contents: > > > def blah(): > > return Storage(dict(nick=db.person[1].nick)) > > > p = cache.ram('blahblah',blah,time_expire=30) > > > 3. guppy stats: > > > Partition of a set of 119902 objects. Total size = 17240104 bytes. > > Index Count % Size % Cumulative % Kind (class / dict of class) > > 0 64658 54 5946560 34 5946560 34 str > > 1 24649 21 2172768 13 8119328 47 tuple > > 2 624 1 2091648 12 10210976 59 dict of gluon.dal.Field > > 3 706 1 888112 5 11099088 64 dict (no owner) > > 4 282 0 876912 5 11976000 69 dict of module > > 5 6701 6 804120 5 12780120 74 types.CodeType > > 6 6359 5 763080 4 13543200 79 function > > 7 652 1 571680 3 14114880 82 type > > 8 652 1 501280 3 14616160 85 dict of type > > 9 451 0 454984 3 15071144 87 dict of class > > <342 more rows. Type e.g. '_.more' to view.> > > > 1. start web2py server > > > 2. execute controller function with contents (nick is plain string): > > > class Blah(): > > def __init__(self): > > self.nick = db.person[1].nick > > > p = cache.ram('blahblah',Blah,time_expire=30) > > > 3. guppy stats: > > > Partition of a set of 132222 objects. Total size = 21017568 bytes. > > Index Count % Size % Cumulative % Kind (class / dict of class) > > 0 69722 53 6343688 30 6343688 30 str > > 1 1248 1 4183296 20 10526984 50 dict of gluon.dal.Field > > 2 26193 20 2334008 11 12860992 61 tuple > > 3 756 1 987360 5 13848352 66 dict (no owner) > > 4 282 0 876912 4 14725264 70 dict of module > > 5 7056 5 846720 4 15571984 74 types.CodeType > > 6 6686 5 802320 4 16374304 78 function > > 7 654 0 573440 3 16947744 81 type > > 8 654 0 501840 2 17449584 83 dict of type > > 9 459 0 471048 2 17920632 85 dict of class > > <356 more rows. Type e.g. '_.more' to view.> > > > Please, look at dict of gluon.dal.Field. In the second scenario the > > count is doubled, which means that db model remains in the memory twice, > > which is bad. > > > I did not try the same with simplier model, so I do not have idea > > whether it matters. > > > In my case it will not be too difficult to replace my own classes with > > dicts or Storages, but maybe the findings will help somebody else facing > > similar leak.. > > > Nice year to all :) > > David > > > - -- > > David Zejda, Open-IT cz > > web development & services > >http://www.o-it.info > > -----BEGIN PGP SIGNATURE----- > > Version: GnuPG v1.4.9 (GNU/Linux) > > Comment: Using GnuPG with Mozilla -http://enigmail.mozdev.org > > > iEYEARECAAYFAk0gqW4ACgkQ3oCkkciamVH0JACfWPEaSQX+7/OqeGeWNhtJr4/R > > JzwAn3Z17zjKv93dxjDTuM2KorzI6LB/ > > =OKMq > > -----END PGP SIGNATURE----- > >

