[mod_python] Co-ordinating ccess to a single-use resource

Nicolas Lehuen nicolas.lehuen at gmail.com
Fri Sep 9 10:52:42 EDT 2005


Oops sorry...

An even better scheme is to write a module which encapsulate the
access to your shared resource, and use it in your published pages
(NOT manipulate the mutex directly from your published pages). This
will be a lot less error prone.

Regards,
Nicolas

2005/9/9, Nicolas Lehuen <nicolas.lehuen at gmail.com>:
> An even better scheme is to write a
> 
> 2005/9/9, Nicolas Lehuen <nicolas.lehuen at gmail.com>:
> > This is a pretty simple Python error. What you want to write is :
> >
> > import tconstants
> > tconstants.mutex.acquire()
> >
> > or :
> >
> > from tconstants import mutex
> > mutex.acquire()
> >
> > but NOT :
> > import tconstants
> > mutex.acquire() # mutex is not defined here, it is defined in the
> > tconstants module...
> >
> > Regards,
> > Nicolas
> >
> > 2005/9/9, John Simeone <jsimeone at inplex.com>:
> > >  Nicolas Lehuen wrote:
> > >
> > >  2005/9/8, Graham Dumpleton <grahamd at dscpl.com.au>:
> > >
> > >
> > >  On 09/09/2005, at 2:23 AM, John Simeone wrote:
> > >
> > >
> > >
> > >  Hello to everyone.
> > >
> > > I am responsible for a project using Apache 2.0 with mod_python in a
> > > Win2k environment, the choice of OS being dictated by the fact that
> > > the purpose of the server is to supply access to a proprietary,
> > > supplier written Windows program to our user base via the web.
> > >
> > > That program is single threaded and provides for only 1 user at a
> > > time. Access to the program in Python is through win32com.
> > >
> > > I am using a mod_python.publisher handler.
> > >
> > > All the http requests come through a single proxy server with a static
> > > address but not all are from browser clients. Some are originating
> > > from perl programs but all requests are directed to a single request
> > > handler.
> > >
> > > Can anyone suggest a method to control access to this single user
> > > resource. In a non-web programming environment, I'd just use a mutex
> > > semaphore to co-ordinate access among the threads but I am too much of
> > > newbie with mod_python and Apache to implement a workable solution so
> > > far.
> > >
> > > What mechanism can I use to create a shared resource that I can lock
> > > and have other requests wait until the resource is unlocked?
> > >
> > >  When using mod_python under Win32 platform, there is effectively only
> > > one process and requests are handled in separate threads. Because of
> > > this, you should be able to mediate access to the shared resource
> > > through a normal thread mutual exclusion locking mechanism just as
> > > easily as you would in a non web environment.
> > >
> > > Graham
> > >
> > >  That is to say :
> > >
> > > import threading
> > >
> > > # "R" stand for Re-entrant, i.e. a thread can acquire the lock multiple
> > > times
> > > # make sure that the lock is instantiated only once, for example by
> > > putting it in
> > > # a module which your published code imports.
> > > lock = threading.RLock()
> > >
> > > lock.acquire()
> > > try:
> > >  # access the shared resource
> > > finally:
> > >  lock.release()
> > >
> > > See the documentation of the threading module for more information.
> > >
> > > Regards,
> > > Nicolas
> > >
> > >
> > >
> > >  Thanks to Graham and Nicolas for their prompt responses.
> > >
> > >  I followed Nicolas' counsel and created a file 'tconstants.py' :
> > >
> > >  import threading
> > >  mutex = threading.RLock()
> > >
> > >  included an 'import' into my publisher handler and wrapped the access to
> > > the single resource with 'mutex.acquire()' and mutex.release(). When I got
> > > an error regarding the unavailability of the mutex global, I ran the
> > > following test in IDLE:
> > >
> > >  import threading
> > >  import tconstants
> > >  def setmutex():
> > >      mutex.acquire()
> > >      return
> > >  setmutex()
> > >
> > >  and received the same error:  "global name 'mutex' is not defined."
> > >
> > >  I ran the threading demo to verify there wasn't a problem with the thread
> > > module in my copy of Python 2.3. It ran fine.
> > >
> > >  The only way I could get this test to work was to alter the code to define
> > > the mutex not in the imported tconstants but in the code directly:
> > >
> > >  import threading
> > >  mutex = threading.RLock()
> > >  def setmutex():
> > >      mutex.acquire()
> > >      return
> > >  setmutex()
> > >  mutex.release()
> > >
> > >  Will defining the mutex this way cause problems in proper threading control
> > > for mod_python in its interaction with Apache?
> > >
> > >  Regards,
> > >
> > >  John
> > >
> > >
> > >
> > > _______________________________________________
> > > Mod_python mailing list
> > > Mod_python at modpython.org
> > > http://mailman.modpython.org/mailman/listinfo/mod_python
> > >
> > >
> > >
> >
>



More information about the Mod_python mailing list