[mod_python] global var on 2.7

Nicolas Lehuen nicolas.lehuen at gmail.com
Sun Jul 10 13:42:18 EDT 2005


By all means let's archive this thread, for it contains this paragraph :

> Then this should work, but be aware that if your bigdic is truly
> enormous, you should tuck it away and only use it when needed. Excessive
> handling of bigdic could result in a huge load and bring your system to
> exhaustion.

THIS is some seriously technical stuff that should only be told in private 
circles ;).

Regards,
Nicolas

2005/7/10, antoine <rouadec at gmail.com>:
> 
> ok, thanks for those advices and insight into mod_python. I'll do more
> testing with the caching module it looks like a solution to my current
> problem.
> 
> it's not trusly enormous but the loading makes the difference between
> an instantaneous page and a one second delay.
> 
> I'm forwarding your answer to the mailing list for the future
> generations ;) (or at least the ones stuck with apache1.3 :)
> 
> On 7/10/05, Jorey Bump <list at joreybump.com> wrote:
> > antoine wrote:
> > > hum, ok but I tried a few more time to access this page in different
> > > fashions and I can say in some circonstances the processes are being
> > > reused (and therefore my bigdict object is not reloaded, as expected)
> > > so it is consistent with Graham explanations.
> >
> > I may have misinterpreted your statement to mean that you would
> > eventually begin using the object in a persistent manner, rather than
> > occassionally access it, which is the case and consistent with both of
> > our explanations.
> >
> > > The cached module "trick" should be more performant that the "global"
> > > only if the modules are cached once for all the processes (and nor per
> > > process) I guess? Anyway, I'll try and see for myself.
> >
> > Well, they are cached per child, so you get a boost.
> >
> > > Should this module also use global or not? Is a simple implementation 
> like:
> >
> > I wouldn't.
> >
> > > CacheBigdic.py
> > > def getBigDic():
> > > return looong_and_painful_process()
> > >
> > > enough or should I go for :
> > > CacheBigdic.py
> > > bigdic = None
> > > def getBigDic():
> > > global bigdic
> > > if not bigdic:
> > > return looong_and_painful_process()
> > > else:
> > > return bigdic
> > >
> > > and call this from index.py with
> > >
> > > import CacheBigdic
> > > bigdic = CacheBigdic.getBigdic()
> > > def index(req):
> > > ...
> > > use(bigdic)
> > > ...
> >
> > I'd do this, probably:
> >
> > # CacheBigdic.py
> >
> > bigdic = looong_and_painful_process()
> >
> > # publishedmodulewithuniquename.py
> >
> > import CacheBigdic
> > def index(req):
> > ...
> > use(CacheBigdic.bigdic)
> > ...
> >
> > If you find errors appearing in your apache log under heavy load, you
> > may need to alter CacheBigdic.py:
> >
> > try:
> > bigdic = looong_and_painful_process()
> > except TheErrorYouSee:
> > bigdic = looong_and_painful_process()
> >
> > It looks redundant, but it's needed because the module is cached. In any
> > case, it's important to protect yourself if your bigdic gets you in 
> trouble.
> >
> > > I do not need truly global var, the cached object is never modified
> > > (and the long_and_painful_process() is already nothing but a (c)pickle
> > > ;).
> >
> > Then this should work, but be aware that if your bigdic is truly
> > enormous, you should tuck it away and only use it when needed. Excessive
> > handling of bigdic could result in a huge load and bring your system to
> > exhaustion.
> >
> > A database is a good candidate for this.
> >
> 
> 
> --
> Antoine
> http://delaunay.org/antoine
> 
> _______________________________________________
> Mod_python mailing list
> Mod_python at modpython.org
> http://mailman.modpython.org/mailman/listinfo/mod_python
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mm_cfg_has_not_been_edited_to_set_host_domains/pipermail/mod_python/attachments/20050710/82b52d48/attachment.html


More information about the Mod_python mailing list