I'm +1 on the whole PEP.
Writing a signal handler is difficult, only "async-signal safe" functions can be called.
You mean a C signal handler? Python signal handlers are not restricted.
Some signals are not interesting and should not interrupt the the application. There are two options to only interrupt an application on some signals:
- Raise an exception in the signal handler, like ``KeyboardInterrupt`` for ``SIGINT``
- Use a I/O multiplexing function like ``select()`` with the Python signal "wakeup" file descriptor: see the function ``signal.set_wakeup_fd()``.
This section looks a bit incomplete. Some calls such as os.read() or os.write() will (should) return a partial result when interrupted and they already handled >0 bytes. Perhaps other functions have a similar behaviour?
On Unix, the ``asyncio`` module uses the wakeup file descriptor to wake up its event loop.
How about Windows?