|
Miro
mmadecki at comcast.net
Mon Apr 3 19:52:10 EDT 2006
Hi,
I’m trying to figure out how to share data between different handlers
running in the same interpreter instance.
I got it running with apache in debug mode (only one worker thread) but not
in normal mode.
According to the value of “req.interpreter” both handlers use the same
interpreter.
I noticed that with “PythonDebug On” according to the log message “handle”
module gets reloaded with every request.
Does that wipe out any global cfg!?
Is there any way to make this working?
I’m using following platform:
- Fedora Core 4
- Apache 2.0.54
- Mod_python 3.2.8 (installed from source to replace pre-packaged
3.1.4)
Complete cfg and example are attached.
test_handle.py does POST to set global data that follow on GET request
should read.
Thanks
Miro
# /etc/httpd/conf.d/python.conf
LoadModule python_module modules/mod_python.so
Listen 8000
NameVirtualHost *:8000
<VirtualHost *:8000>
SetHandler mod_python
PythonPath "['/tmp/py'] + sys.path"
PythonInterpreter ONE
PythonAutoReload Off
<Location "/get">
PythonHandler handle::get_handler
</Location>
<Location "/post">
PythonHandler handle::post_handler
</Location>
</VirtualHost>
# /tmp/py/handle.py
from mod_python import apache
class SharedData:
data = "Doesn't work"
def get_handler(req):
req.content_type = "text/plain"
req.write(SharedData.data)
apache.log_error("get_handler wrote : " + SharedData.data)
apache.log_error("get_handler interpreter : %r" % req.interpreter)
return apache.OK
def post_handler(req):
SharedData.data = req.read()
apache.log_error("post_handler read : " + SharedData.data)
apache.log_error("post_handler interpreter : %r" % req.interpreter)
return apache.OK
# /tmp/py/test_handle.py
import httplib
def test_get():
print "test_get"
PORT = 8000
PATH = "/get"
conn = httplib.HTTPConnection("127.0.0.1:%s" % PORT)
conn.putrequest("GET", PATH, skip_host=1)
conn.putheader("Host", "%s:%s" % ("test_get", PORT))
conn.endheaders()
response = conn.getresponse()
rsp = response.read()
print "Got back : %s" %rsp
conn.close()
def test_post():
print 'test_post'
params = 'It works'
print " writing %d bytes..." % len(params)
PORT = 8000
PATH = "/post"
conn = httplib.HTTPConnection("127.0.0.1:%s" % PORT)
conn.putrequest("POST", PATH, skip_host=1)
conn.putheader("Host", "test_rpost:%s" % PORT)
conn.putheader("Content-Length", len(params))
conn.endheaders()
conn.send(params)
conn.close()
if __name__ == "__main__":
test_post()
test_get()
--
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.1.385 / Virus Database: 268.3.5/300 - Release Date: 04/03/06
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mm_cfg_has_not_been_edited_to_set_host_domains/pipermail/mod_python/attachments/20060403/c7862eae/attachment.html
|