Title: SIGALRM fails to interrupt time.sleep() call on Python 3.5
Type: Stage:
Components: Library (Lib) Versions: Python 3.5
Status: closed Resolution: not a bug
Dependencies: Superseder:
Assigned To: Nosy List: martin.panter, ryan.petrello
Priority: normal Keywords:

Created on 2016-10-18 02:52 by ryan.petrello, last changed 2016-10-18 03:16 by martin.panter. This issue is now closed.

Messages (2)
msg278835 - (view) Author: Ryan Petrello (ryan.petrello) Date: 2016-10-18 02:52
I may have found a bug in SIGALRM handling in Python3.5.  I've not been able to reproduce the same issue in Python2.7 or 3.4.  Here's a simple example that illustrates the issue (which I'm able to reproduce on OS X 10.11.3 El Capitan and Ubuntu 14.04):

$ python2 --version; python3.4 --version; python3.5 --version
Python 2.7.11
Python 3.4.4
Python 3.5.1

$ cat
import signal, time

def handler(signum, frame):
    print('Signal handler called with signal %s' % signum)

# Set the signal handler and a 1-second alarm
signal.signal(signal.SIGALRM, handler)

# We should not actually sleep for 10 seconds

$ time python2
Signal handler called with signal 14
python2  0.04s user 0.02s system 5% cpu 1.075 total

$ time python3.4
Signal handler called with signal 14
python3.4  0.07s user 0.01s system 7% cpu 1.092 total

$ time python3.5
Signal handler called with signal 14
python3.5  0.09s user 0.02s system 1% cpu 10.115 total

Note that when run under python3.5, the program does not exit until 10 seconds have passed.
msg278838 - (view) Author: Martin Panter (martin.panter) * (Python committer) Date: 2016-10-18 03:16
This is by design; see PEP 475, and the documentation <>.

If you make your signal handler raise an exception, it will interrupt the sleep() call most of the time. But if the signal happens to be received just before the sleep() call is about to be entered, the handler will only be run when the underlying OS sleep() call returns 10 s later.
Date User Action Args
2016-10-18 03:16:43martin.pantersetstatus: open -> closed

nosy: + martin.panter
messages: + msg278838

resolution: not a bug
2016-10-18 02:53:14ryan.petrellosettitle: SIGALRM fails to interrupt time.sleep() call on Python 3.6 -> SIGALRM fails to interrupt time.sleep() call on Python 3.5
2016-10-18 02:52:22ryan.petrellocreate