|
Alan Davies
alan at goatpunch.com
Mon Mar 7 17:30:29 EST 2005
Yes, I've found it much safer to pass the request object around
as a parameter:
ddcServer.do_GET(req)
I wrap access to global objects with a thread lock, taking care
to ensure that the thread is unlocked even if an exception is
raised:
import thread
lock = thread.allocate_lock();
ddcServer = None
def handler(req):
lock.acquire
try:
global ddcServer
if not ddcServer:
# create ddcServer ...
finally:
lock.release()
ddcServer.do_GET(req)
--Alan
On Mon, 7 Mar 2005 17:04:32 -0500, "Graham Dumpleton"
<grahamd at dscpl.com.au> said:
> BTW, it is not generally good practice to be caching a request object
> into
> global data structures as the request object only really exists in a
> valid
> state for the length of the request. Also, in general the approach you
> are
> using looks like it would fail in a multithreaded MPM. This is because
> more
> than one request could invoke the handler at the same time, and thus they
> will muck up each other because they both manipulate the global data
> without any exclusion locks.
|