On 4/24/06, "Martin v. Löwis" <martin at v.loewis.de> wrote: > Tim Peters wrote: > > Does > > > > with cv: > > > > work to replace the outer (== only) acquire/try/finally/release dance? > > Indeed it does - although implemented in a somewhat convoluted way: > A lock *is* a context (or is that "context manager"), i.e. it implements > > def __context__(self): return self > __enter__=acquire > def __exit__(self,*args): return self.release() #roughly > > A _Condition *has* a lock, so it could become the context (manager?) > through > > def __context__(self): return self.lock > > However, instead of doing that, it does > > def __context__(self): return self > # roughly: __enter__ is actually set in __init__ to self.lock.acquire > def __enter__(self): > return self.acquire() > def __exit__(self): > return self.release > > Looks somewhat redundant to me, but correct. Thanks -- I didn't see the shortcut when I coded this. I'll fix it. Tim is right, the UNLOCK/LOCK part is implied in the wait() call. However, the wait() implementation really *does* provide a use case for the primitive operation that Nick proposed, and it can't be refactored to remove the pattern Martin disapproves of (though of course the existing try/finally is fine). I'm not sure if the use case is strong enough to warrant adding it; I think it's fine not to support it directly. -- --Guido van Rossum (home page: http://www.python.org/~guido/)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4