| mike bayer 
    mike_mp at zzzcomputing.com Wed Sep 8 21:31:27 EDT 2004 
 hi -
this is a slightly tricky one to demonstrate.  Running apache 2.0 with the
worker MPM on linux, it appears that a page that requests a Session, and
then takes a really long time to finish, blocks certain other
session-enabled pages from completing, regardless of which session ID they
have.  though not every page, just maybe ones in the same child process ? 
not totally sure.
I am assuming this behavior is due to the global locking mechanism used
within Session (to which I cant readily find documentation).   I have a
feeling this is "expected" behavior as opposed to a bug....though it sort
of sucks if thats the case.  I suppose I am looking for a description of
why the below example does what it does.
first, run apache with the worker MPM with a pretty small process/thread
size, say 5 ThreadsPerChild and 2 StartServers.
then, mptest.py, configured just like mptest.py in the mod python
documentation:
from mod_python import apache, util, Session
from time import sleep
def handler(req):
        req.content_type = 'text/html'
        session = Session.Session(req)
        fields = util.FieldStorage(req)
        if fields.has_key('pause'):
                req.write("hi, this is a very slow page\n")
                sleep(5)
                req.write("really, a very slow page\n")
                sleep(5)
                req.write("ok\n")
        else:
                req.write("""
hello world ! reloading in 100ms
<script>setTimeout('window.location.href="mptest.py"', 100)</script>
""")
        return apache.OK
Then, set your browser to call the fast version over and over again:
http://myserver.com/mptest.py
then to watch it hang due to a totally unrelated access by someone else,
go to a shell window somewhere and type:
wget --output-document=- http://myserver.com/mptest.py?pause=1
to get the slow version.  at least on my server, the fast-reloading page
will hit a certain process/thread that will just hang, and there it will
stay until your slow command-line one completes.
i am gathering this is either totally new news, or utterly obvious to
everyone but me.  comments ?
 |