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 <d...@atlas.cz>: > -----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----- >