[Python-Dev] Proposed addition to threading module (original) (raw)

Tim Peters tim.peters at gmail.com
Mon Apr 24 21:10:29 CEST 2006


[Guido]

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 :-).

That didn't make much sense to me. If you're using a condition variable cv, the way that should be written is:

cv.acquire()
try:
    while nothing to do:
        cv.wait()   # which unlocks on entry, and locks before return
    do something
finally:
    cv.release()

IOW, there is no "inner UNLOCK/LOCK" for the user to worry about (although the implementation of wait() has to worry about it).

Does

with cv:

work to replace the outer (== only) acquire/try/finally/release dance? If so, that seems like plenty to me.



More information about the Python-Dev mailing list