[mod_python] shared memory and module import problems

Kevin J. Smith hockeysk8 at gmail.com
Tue Feb 21 09:22:27 EST 2006


Hi,

I have a page controller that all handlers import with "from
myapp.gui.pagecontroller import PageController".  Each handler is a class
derived from the PageController.

In the page controller, I have attempted to set up a shared memory cache for
all the controllers with code very similar to the following:

#...
import threading

CACHE_LOCK = threading.Lock()
cache = {}

def _fillCache():
    cache['one'] = '1'
    cache['two'] = '2'

class PageController:
# ...
    def __init__(self):
        #....
        if not len(cache.keys()):
            CACHE_LOCK.acquire()
            _fillCache()
            CACHE_LOCK.release()
        #...


However, I have discovered that this module is continually reimported
because it ALWAYS calls the _fillCache() function despite all the handlers
running within the same interpreter.

I have upgraded to mod_python 3.2.7 noticing that in the change log there is
a lot about fixing module import problems but my app is still behaving the
same way.

The flow of my app is that all requests are handled by a frontController
handler (this is explicitly set in the httpd config) which, after checking
the session and authentication and what-not and based on the request path,
forwards the request onto one of my pageController handlers via
util.redirect().  If I have followed Graham's notes about module importing
correctly, the frontController and pageController classes would be imported
via import_module() whereas the actual pageController module is imported via
the regular python import mechanism.

I have spent some time reading about the various "uniquenesses" of module
importing within mod_python but it hurt my head slightly and I didn't know
if most of it reflected the state of affairs in version 3.2.7.  From reading
Graham's page I don't believe I should have a problem with the
PageController handler continually being reimported but it certainly appears
to be doing just that.

Can someone shed some light on what I may be doing wrong or a possible
solution to setting up a shared cache within an interpreter?  I know that if
I run similar code outside of mod_python my cache design works fine.

Cheers
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mm_cfg_has_not_been_edited_to_set_host_domains/pipermail/mod_python/attachments/20060221/c2fc83de/attachment.html


More information about the Mod_python mailing list