[Python-Dev] Proposed addition to threading module - released

Guido van Rossum guido at python.org
Mon Apr 24 20:34:00 CEST 2006


On 4/23/06, "Martin v. Löwis" <martin at v.loewis.de> wrote:
> Nick Coghlan wrote:
> > Do we want to add a "released" context manager to the threading module for
> > 2.5?
>
> I don't think that should be added. I would consider it a dangerous
> programming style: if the lock merely doesn't "need" to be held (i.e.
> if it isn't necessary, but won't hurt), one should just keep holding
> the lock. If it is essential to release the lock, because the code
> would otherwise deadlock, the code should be dramatically revised
> to avoid that situation, e.g. by redefining the granularity of the
> lock, and moving the with statements accordingly.

Actually, what Nick describes is *exactly* how one should write code
using a condition variable:

  LOCK
  while nothing to do:
      UNLOCK
      wait for the condition variable (or sleep, or whatever)
      LOCK
  # here we have something to do with the lock held
  remove the to-do item
  UNLOCK

except that the outer LOCK/UNLOCK pair should be using a try/except
and the inner UNLOCK/LOCK pair should too. I don't see how you can do
this easily by rewriting the code; the rewrite would be considerably
ugly (or requires a GOTO :-).

--
--Guido van Rossum (home page: http://www.python.org/~guido/)


More information about the Python-Dev mailing list