[mod_python] Interpreters and global names

Rolf van de Krol mod_python at rolfvandekrol.nl
Tue Aug 28 11:52:14 EDT 2007


Hi everybody at this list,

I've got a problem. To me it seems quite complex so explaining it takes 
some code to write. But i'm a total newbie to mod_python. I've read the 
documentation, I understand it, I managed to setup a running mod_python 
installation and I can write some simple applications with it. That's it.
So, my apologies for the amount of code in the message,  I hope you can 
bring the effort to read it to understand my problem. I enclosed python 
code in <code> tags to show where the code begins and ends.

I've set up two VirtualHosts with the following directives in 
httpd.conf. (I changed some names, because the domainnames used for this 
are not to be published.)

NameVirtualHost *:80
<VirtualHost *:80>
    ServerName domain1.ext
    ServerAdmin admin at domain1.ext
    <Location />
        Order Allow,Deny
        Allow from all
      
        SetHandler mod_python
        PythonInterpreter domain1interpreter
        PythonHandler D:/main.py
        PythonDebug On
    </Location>
</VirtualHost>

<VirtualHost *:80>
   ServerName admin.domain1.ext
   ServerAdmin admin at domain1.ext
     <Location />
       Order Allow,Deny
       Allow from all
             SetHandler mod_python
       PythonInterpreter domain1interpreter
       PythonHandler D:/radmin.py
       PythonDebug On
   </Location>
</VirtualHost>

As you can see, they both share the same interpreter. The setup works. 
With the following python code in main.py and radmin.py they both print 
the same name.

<code>
from mod_python import apache
def handler(req):
    req.content_type = 'text/plain'
    req.write(req.interpreter)
    return apache.OK
</code>

I changed main.py to the following code:

<code>
from mod_python import apache
import collections

def handler(req):
    if not globals().has_key('aPool'):
        aPool = collections.deque()
        global aPool
    else:
        global aPool

    # code to use aPool and print some output
</code>

aPool is used to create a database connection pool, but that's not 
important to the problem. The code above works fine.

I change radmin.py to the following:

<code>
from mod_python import apache
import collections
import pprint

def handler(req):
    req.content_type = 'text/plain'
    req.write(pprint.pformat(globals()))
</code>

What I expected was that I could find aPool in the output of radmin.py. 
But I couldn't. It just isn't there. It seems that the global names 
aren't as global as they seem to be. Is there a way to make variables 
set in main.py accessable to radmin.py?

I hope any of you knows the answer.

Rolf van de Krol



More information about the Mod_python mailing list