[mod_python] Loading servlet problem

Daniel Popowich dpopowich at comcast.net
Tue Jun 21 14:35:47 EDT 2005


Manera, Villiam writes:
> I noted a funny behavior on loading servlet, sometime work sometime :
> 
> File "/usr/local/lib/python2.4/site-packages/mod_python/servlet.py",
> line 1345, in get_servlet
>     klass, servlets = self.__load_servlet(filename)
> 
>   File "/usr/local/lib/python2.4/site-packages/mod_python/servlet.py",
> line 1276, in __load_servlet
>     raise ValueError, ('%s is not a subclass of Servlet (in %s)'
> 
> ValueError: menu is not a subclass of Servlet (in
> /discoe/script/cgi/bulgaria/bulgaria_menu.py/menu.mps)
> 
> Obviously menu.mps is subclass od Servlet.
> 
> 
> This happened sometime, on different servlet ????
> 
> 
> If I restart apache all work fine for some time...

Have you modified servlet.py?  If so and PythonAutoReload is "on"
then servlet.py is being reloaded by the python interpreter which
will create a new Servlet class with different identifier than the
one cached by the servlet manager in servlet.py.  That's why
restarting apache fixes your problem: you get fresh copies of
everything in new python interpreters.

To avoid this:

  1. You really shouldn't change servlet.py.  Put
     modifications/extensions in subclasses...the power of OO and
     all...

  2. In development mode, I configure my prefork apache with:

        MaxRequestsPerChild  1

     Sure, it's a performance hit, but you NEVER have to deal with
     stale python module importing issues and you don't have to
     litter your code with special-case importing code, etc.



Cheers,

Daniel Popowich
-----------------------------------------------
http://home.comcast.net/~d.popowich/mpservlets/


More information about the Mod_python mailing list