Nathaniel Smith added the comment:

FWIW trio's strategy for handling this is to install a clever signal handle 
that routes the signal to the event loop IF the signal arrives while the event 
loop is running, or while particularly sensitive code like trio.Lock.__aexit__ 
is running. The rest of the time it raises KeyboardInterrupt directly. So we 
actually can have signal safety and deal with runaway coroutines at the same 
time, and this patch does provide a meaningful reduction in race conditions for 
trio [1]. In principle there's nothing stopping asyncio or other coroutine 
runners from implementing a similar strategy.

[1] actually this is currently a lie, because this patch reveals another 
independent race condition: there's no way for my clever signal handler to tell 
that it's in a sensitive function like trio.Lock.__aexit__ if it runs on the 
very first bytecode of the function, before the function has had a chance to 
mark itself as sensitive. But *that's* fixable with something like bpo-12857.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue29988>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to