signal
This module provides mechanisms to use signal handlers in Python.
Some general rules for working with signals handlers:
- A handler for a particular signal, once set, remains installed until
it is explicitly reset (i.e. Python uses the BSD style interface).
- There is no way to ``block'' signals temporarily from critical
sections (since this is not supported by all flavors).
- Although Python signal handlers are called asynchronously as far as
the Python user is concerned, they can only occur between the
``atomic'' instructions of the Python interpreter. This means that
signals arriving during long calculations implemented purely in C
(e.g. regular expression matches on large bodies of text) may be
delayed for an arbitrary amount of time.
- When a signal arrives during an I/O operation, it is possible that the
I/O operation raises an exception after the signal handler returns.
This is dependent on the underlying system's semantics regarding
interrupted system calls.
- Because the C signal handler always returns, it makes little sense to
catch synchronous errors like SIGFPE or SIGSEGV.
- Python installs a small number of signal handlers by default:
SIGPIPE is ignored (so write errors on pipes and sockets can be
reported as ordinary Python exceptions), SIGINT is translated
into a KeyboardInterrupt exception, and SIGTERM is
caught so that necessary cleanup (especially sys.exitfunc) can
be performed before actually terminating. All of these can be
overridden.
- Some care must be taken if both signals and threads are used in the
same program. The fundamental thing to remember in using signals and
threads simultaneously is: always perform signal() operations
in the main thread of execution. Any thread can perform an
alarm(), getsignal(), or pause(); only the main
thread can set a new signal handler, and the main thread will be the
only one to receive signals (this is enforced by the Python signal
module, even if the underlying thread implementation supports sending
signals to individual threads). This means that signals can't be used
as a means of interthread communication. Use locks instead.
The variables defined in the signal module are:
The signal module defines the following functions: