Signals and file events (select/poll)
The signal module:
Calling signal.set_wakeup_fd(fd)
sets a file descriptor to
be used; when a signal is received, a byte is written to
that file descriptor. There’s also a C-level function,
PySignal_SetWakeupFd(),
for setting the descriptor.
Event loops will use this by opening a pipe to create two
descriptors, one for reading and one for writing. The
writable descriptor will be passed to set_wakeup_fd(),
and
the readable descriptor will be added to the list of
descriptors monitored by the event loop via select()
or
poll().
On receiving a signal, a byte will be written and
the main event loop will be woken up, avoiding the need to
poll.
The siginterrupt()
function is now available from Python
code, and allows changing whether signals can interrupt
system calls or not.
The setitimer()
and getitimer()
functions have also been
added (where they’re available). setitimer()
allows
setting interval timers that will cause a signal to be
delivered to the process after a specified time, measured in
wall-clock time, consumed process time, or combined
process+system time.