[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