OK, cool. I hope this won't slow Trollius down too much (unlikely since locks aren't needed much). On Jan 8, 2014 8:21 AM, "Marc Schlaich" <[email protected]> wrote:
> Ah thanks, found it. The point is the behavioral difference between > `return` and `raise Return`: > > https://bitbucket.org/haypo/trollius/commits/df66a7c049001971c6abd27ed8a784bbdcf1ce26 > > On Tuesday, January 7, 2014 11:11:58 PM UTC+1, Guido van Rossum wrote: >> >> Well, at that point all three coroutines are blocked in wait(), and >> (per condition variable specs) wait() releases the lock. I haven't >> looked at Trollius so I don't know what it is doing -- maybe it >> requires more ticks to reach this state? >> >> FWIW, the idiom "yield from <lock>" is meant to be only used in >> combination with a with-statement, like this: >> >> with (yield from lock): >> <code running with the lock held> >> >> This is meant to be the closest analog to >> >> with lock: >> <etc.> >> >> when using threaded locks. It is different from >> >> yield from lock.acquire() >> >> which matches the threaded >> >> lock.acquire() >> >> (i.e. no automatic release at end of block). >> >> The problem is that the current lock implementation in asyncio allows >> incorrect uses to go unchecked. I wonder if the correct solution isn't >> to define an explicit context manager, so that "with lock" will fail >> (no __enter__ method) rather than silently entering the block without >> acquiring the lock. >> >> I've just filed http://code.google.com/p/tulip/issues/detail?id=100 to >> track this. >> >> >> On Tue, Jan 7, 2014 at 11:48 AM, Marc Schlaich <[email protected]> >> wrote: >> > Guido, I'm really confused by the behavior of the locks in the >> unittests. >> > E.g. I do not understand why the condition is not locked after a short >> run >> > of the event loop in test_wait (test_locks.ConditionTests). >> > >> > On trollius this fails (as expected IMO): >> > >> > FAIL: test_wait (test_locks.ConditionTests) >> > ---------------------------------------------------------------------- >> > Traceback (most recent call last): >> > File "/Users/marc/Documents/python/trollius/tests/test_locks.py", >> line >> > 422, in test_wait >> > self.assertFalse(cond.locked()) >> > AssertionError: True is not false >> > >> > >> > Maybe you can shed some light on this and a few other issues: >> > https://bitbucket.org/haypo/trollius/pull-request/3/some- >> fixes-for-test_locks >> >> >> >> -- >> --Guido van Rossum (python.org/~guido) >> >
