[mod_python] threading module within mod_python

Fabiano Sidler fabianosidler at swissonline.ch
Fri Oct 7 06:04:11 EDT 2005


Hi!

I wanted the main thread to be notified about raised exceptions in other
threads. Thus I wrote a threaded handler in a way similar like this:

--- snip ---
from mod_python import apache
from threading import currentThread, Thread, Lock

mainthread = currentThread()
raiselock = Lock()
raiselist = []
def Raise(exc):
 raiselock.acquire()
 raiseexc.append(exc)
 raiselock.release()
mainthread.Raise = Raise

class ReqThread(Thread):
 def __init__(self, req):
  Thread.__init__(self)
  self.req = req
 def run(self):
  # Test raise
  #raise Exception('run()')
  mainthread.Raise(Exception('run()'))
  return

def handler(req):
 exc = None
 r = ReqThread(req)
 r.start(); r.join()
 raiselock.acquire()
 if len(raiselist): exc = raiselist.pop
 raiselock.release()
 if exc: raise exc
 return apache.OK
--- snap ---

However, this doesn't work. If I uncomment the raise in ReqThread.run,
these exceptions even don't appear in the logs until I stop the httpd, which
causes following additional errors:

[Fri Oct 07 11:12:45 2005] [warn] child process 9229 still did not exit, 
sending a SIGTERM
[Fri Oct 07 11:12:45 2005] [warn] child process 9230 still did not exit, 
sending a SIGTERM

Quite strange, isn't it?
I'm running Kubuntu and httpd uses mpm_prefork. Is there a chance to get my
Threads working?

Best wishes,
Fips


More information about the Mod_python mailing list