Geoff Talvola
gtalvola at nameconnector.com
Tue May 29 14:04:15 EST 2001
I just wanted to confirm that I also get the same behavior on Windows -- if I stress out a simple script like the one below with multiple simultaneous requests, I get sporadic errors, just as Chris Trengove reported. I'd be happy to help diagnose and fix the problem, but I know next to nothing about Apache and mod_python's internals. I do have access to VC++ 6.0 and I have successfully compiled the mod_python dll (for Python 2.1). Where should I go from here? >I have been testing the following script on Apache with mod_python (Apache >1.13.17, mod_python 2.7.2, Windows 2000). I have been interested in testing >the possible throughput of this (and more useful scripts), so I have >another Python script which continually loads this "page". > >from mod_python import apache >import thread > >def handler(req): > req.content_type = "text/plain" > req.send_http_header() > req.write("%d\n" % thread.get_ident()) > return apache.OK > >When I run more than one copy of the driver script (in multiple consoles), >I get behavior indicative of some threading problems. Specifically, some >connections get "lost", the Apache error log reports various instances of >"IOError: Write failed...", and I occassionally get an access violation >inside Apache. Similarly, if I only run one copy of the driver script, and >just keep hitting the refresh button in a browser, the browser >occassionally returns TWO numbers, and sometimes reports an error in >retrieving the data. Note that I have tested my driver program retrieving a >simple text file, and everything works as expected, so it does not appear >to be a problem with Apache. (The problem also goes away if I set >ThreadPerChild to 1 in the Apache configuration.) > >I have also found that, if I comment out the req.write() statement in the >handler, then there are no problems. From my examination of the >implementation of the request object, I see that req_write() contains calls >to Py_BEGIN_ALLOW_THREADS / Py_END_ALLOW_THREADS, whereas >req_send_http_header() contains no such calls. This suggests to me that >some thread switching is occurring inside req_write() which is messing with >the state of the interpreter. > >I would be most grateful if anyone has any information to offer on this. > >Chris Trengove -- - Geoff Talvola gtalvola at NameConnector.com
|