On Sat, Dec 19, 2015 at 1:40 PM, Matthias Urlichs <matth...@urlichs.de> wrote:
> On 19.12.2015 20:25, Guido van Rossum wrote: > > Perhaps you can add a check for a simple boolean 'stop' flag to your > > condition check, and when you want to stop the loop you set that flag > > and then call notify() on the condition. Then you can follow the > > standard condition variable protocol instead of all this nonsense. :-) > Your example does not work. > > > def stop_it(self): > > self.stopped = True > > self.uptodate.notify() > > self.uptodate needs to be locked before I can call .notify() on it. > Fair enough. > Creating a new task just for that seems like overkill, and I'd have to > add a generation counter to prevent a race condition. Doable, but ugly. > I guess that's due to some application logic, but whatever. You don't really seem to care about finding a solution for this problem anyways: > However, this doesn't fix the generic problem; Condition.wait() was just > what bit me today. > When a non-async generator goes out of scope, its finally: blocks will > execute. An async procedure call whose refcount reaches zero without > completing simply goes away; finally: blocks are *not* called and there > is *no* warning. > I consider that to be a bug. > If that's so, can you demonstrate that without invoking all these other things? Other traffic in this thread seems to indicate it may be not as simple as that. -- --Guido van Rossum (python.org/~guido)
_______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com