Lee Brown
administrator at leebrown.org
Sat Jun 4 16:04:59 EDT 2005
Greetings! First, thanks to all who sent replies; they were very helpful. I have solved the problem and I am posting it here for future reference: My first step was to ensure that site_setup.py was actually executing at server initialization, so I changed it to this: file = open('junkspace.txt', 'w') file.write("It's magic, I tell you!") file.close() fetch = open('junkspace.txt', 'r') magic_string = fetch.read() fetch.close() By watching the file timestamp, I would be able to see when 'junkspace.txt' was being touched. But 'junkspace'txt' never appeared. So I tried adding this to xmlhandler.py: import site_config.py Now 'junkspace.txt' was being created, but it updated only when xmlhandler.py was being called by a request. Not the results I was looking for; the context of site_config was within xmltest.py and not within the subinterpreter as was intended. So I went back and very carefully checked the mod_python docs, sections 4.1 and 5.4; and the python C API, section 8. It turns out that I had made a mistake in my initial setup: My PythonImport statement was not in the 'main' section of httpd.conf as I originally thought; it inadvertantly ended up in a 'vhosts' section. So I made these changes: In httpd.conf 'main' ... AddHandler mod_python .py PythonPath ...(snipped for brevity)... PythonImport site_setup.py crashtest ... And then in my vhosts configuration: <VirtualHost *:80> ServerName crashtest.leebrown.org ... PythonInterpreter crashtest PythonDebug On ... Poof! Now 'junkspace.txt' updates only on server startup and 'from site_setup import magic_string' returns the correct results within the context of the handler. For reference, I found the documentation for the Py_NewInterpreter function to be most useful. By examining the contents of sys.modules I was able to verify which objects were showing up in which namespaces - very handy, and since sys.modules is always globally available within an interpreter. It can be inspected even if other parts of your code are falling apart like a clown car at the circus. So it turns out that the answer was indeed 'dirt simple:' check your setup carefully, and read the documentation thoroughly! Best Regards, Lee E. Brown (administrator at leebrown.org)
|