Python signal.SIGALRM Examples
The following are 30
code examples of signal.SIGALRM().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
signal
, or try the search function
.
Example #1
Source File: _utils.py From cotyledon with Apache License 2.0 | 7 votes |
def __init__(self): # Setup signal fd, this allows signal to behave correctly if os.name == 'posix': self.signal_pipe_r, self.signal_pipe_w = os.pipe() self._set_nonblock(self.signal_pipe_r) self._set_nonblock(self.signal_pipe_w) signal.set_wakeup_fd(self.signal_pipe_w) self._signals_received = collections.deque() signal.signal(signal.SIGINT, signal.SIG_DFL) if os.name == 'posix': signal.signal(signal.SIGCHLD, signal.SIG_DFL) signal.signal(signal.SIGTERM, self._signal_catcher) signal.signal(signal.SIGALRM, self._signal_catcher) signal.signal(signal.SIGHUP, self._signal_catcher) else: # currently a noop on window... signal.signal(signal.SIGTERM, self._signal_catcher) # FIXME(sileht): should allow to catch signal CTRL_BREAK_EVENT, # but we to create the child process with CREATE_NEW_PROCESS_GROUP # to make this work, so current this is a noop for later fix signal.signal(signal.SIGBREAK, self._signal_catcher)
Example #2
Source File: test_misc.py From qdb with Apache License 2.0 | 6 votes |
def test_timeout_ctx_mgr(self, test_name, exc, assertion): tsignal = signal.SIGALRM existing_handler = signal.getsignal(tsignal) try: with QdbTimeout(1, exc) as t: self.assertTrue(t.pending) time.sleep(2) if exc: self.fail('Timeout did not stop the sleep') except Exception as u: assertion(self, u, t) else: self.assertIs( exc, False, 'QdbTimeout(1, False) should not raise an exception' ) self.assertIs(signal.getsignal(tsignal), existing_handler)
Example #3
Source File: test_subprocess.py From ironpython2 with Apache License 2.0 | 6 votes |
def test_communicate_eintr(self): # Issue #12493: communicate() should handle EINTR def handler(signum, frame): pass old_handler = signal.signal(signal.SIGALRM, handler) self.addCleanup(signal.signal, signal.SIGALRM, old_handler) # the process is running for 2 seconds args = [sys.executable, "-c", 'import time; time.sleep(2)'] for stream in ('stdout', 'stderr'): kw = {stream: subprocess.PIPE} with subprocess.Popen(args, **kw) as process: signal.alarm(1) try: # communicate() will be interrupted by SIGALRM process.communicate() finally: signal.alarm(0)
Example #4
Source File: profiler.py From pyFileFixity with MIT License | 6 votes |
def start(self): self.last_profile_time = timer() if self.use_signal: try: signal.signal(signal.SIGALRM, self._signal) # the following tells the system to restart interrupted system calls if they are # interrupted before any data has been transferred. This avoids many of the problems # related to signals interrupting system calls, see issue #16 signal.siginterrupt(signal.SIGALRM, False) except ValueError: raise NotMainThreadError() signal.setitimer(signal.ITIMER_REAL, self.interval, 0.0) else: sys.setprofile(self._profile)
Example #5
Source File: test_threadsignals.py From Fluid-Designer with GNU General Public License v3.0 | 6 votes |
def test_rlock_acquire_interruption(self): # Mimic receiving a SIGINT (KeyboardInterrupt) with SIGALRM while stuck # in a deadlock. # XXX this test can fail when the legacy (non-semaphore) implementation # of locks is used in thread_pthread.h, see issue #11223. oldalrm = signal.signal(signal.SIGALRM, self.alarm_interrupt) try: rlock = thread.RLock() # For reentrant locks, the initial acquisition must be in another # thread. def other_thread(): rlock.acquire() thread.start_new_thread(other_thread, ()) # Wait until we can't acquire it without blocking... while rlock.acquire(blocking=False): rlock.release() time.sleep(0.01) signal.alarm(1) t1 = time.time() self.assertRaises(KeyboardInterrupt, rlock.acquire, timeout=5) dt = time.time() - t1 # See rationale above in test_lock_acquire_interruption self.assertLess(dt, 3.0) finally: signal.signal(signal.SIGALRM, oldalrm)
Example #6
Source File: test_selectors.py From Fluid-Designer with GNU General Public License v3.0 | 6 votes |
def test_select_interrupt_noraise(self): s = self.SELECTOR() self.addCleanup(s.close) rd, wr = self.make_socketpair() orig_alrm_handler = signal.signal(signal.SIGALRM, lambda *args: None) self.addCleanup(signal.signal, signal.SIGALRM, orig_alrm_handler) self.addCleanup(signal.alarm, 0) signal.alarm(1) s.register(rd, selectors.EVENT_READ) t = time() # select() is interrupted by a signal, but the signal handler doesn't # raise an exception, so select() should by retries with a recomputed # timeout self.assertFalse(s.select(1.5)) self.assertGreaterEqual(time() - t, 1.0)
Example #7
Source File: timeout_callback_manager.py From n6 with GNU Affero General Public License v3.0 | 6 votes |
def _reproduce_preserved_alarm_stuff(self): preserved = self._preserved_alarm_data if preserved is not None: assert preserved.handler is not None # set the preserved handler as well as timeout and repeat # interval (if any; note: if the timeout has already passed # it will be set, by `_set_nonzero_alarm()`, to `MINIMAL_TIMEOUT`) self._signal(signal.SIGALRM, preserved.handler) if preserved.timeout: already_elapsed = time.time() - preserved.preserved_at self._store_alarm(preserved.timeout - already_elapsed, preserved.repeat_interval) else: self._store_alarm(0) self._clear_preserved_alarm_data() else: self._store_alarm(0)
Example #8
Source File: test_selectors.py From Fluid-Designer with GNU General Public License v3.0 | 6 votes |
def test_select_interrupt_exc(self): s = self.SELECTOR() self.addCleanup(s.close) rd, wr = self.make_socketpair() class InterruptSelect(Exception): pass def handler(*args): raise InterruptSelect orig_alrm_handler = signal.signal(signal.SIGALRM, handler) self.addCleanup(signal.signal, signal.SIGALRM, orig_alrm_handler) self.addCleanup(signal.alarm, 0) signal.alarm(1) s.register(rd, selectors.EVENT_READ) t = time() # select() is interrupted by a signal which raises an exception with self.assertRaises(InterruptSelect): s.select(30) # select() was interrupted before the timeout of 30 seconds self.assertLess(time() - t, 5.0)
Example #9
Source File: test_io.py From Fluid-Designer with GNU General Public License v3.0 | 6 votes |
def check_reentrant_write(self, data, **fdopen_kwargs): def on_alarm(*args): # Will be called reentrantly from the same thread wio.write(data) 1/0 signal.signal(signal.SIGALRM, on_alarm) r, w = os.pipe() wio = self.io.open(w, **fdopen_kwargs) try: signal.alarm(1) # Either the reentrant call to wio.write() fails with RuntimeError, # or the signal handler raises ZeroDivisionError. with self.assertRaises((ZeroDivisionError, RuntimeError)) as cm: while 1: for i in range(100): wio.write(data) wio.flush() # Make sure the buffer doesn't fill up and block further writes os.read(r, len(data) * 100) exc = cm.exception if isinstance(exc, RuntimeError): self.assertTrue(str(exc).startswith("reentrant call"), str(exc)) finally: wio.close() os.close(r)
Example #10
Source File: test_misc.py From qdb with Apache License 2.0 | 6 votes |
def test_timeout_start(self, test_name, exc, assertion): """ Tests running a timeout with the start method that will raise itself. """ tsignal = signal.SIGALRM existing_handler = signal.getsignal(tsignal) t = QdbTimeout(1, exc) t.start() with self.assertRaises(Exception) as cm: self.assertTrue(t.pending) time.sleep(2) if exc: self.fail('Timeout did not stop the sleep') self.assertIs(cm.exception, exc or t) self.assertIs(signal.getsignal(tsignal), existing_handler)
Example #11
Source File: profiler.py From pyFileFixity with MIT License | 5 votes |
def stop(self): if self.use_signal: signal.setitimer(signal.ITIMER_REAL, 0.0, 0.0) try: signal.signal(signal.SIGALRM, signal.SIG_IGN) except ValueError: raise NotMainThreadError() else: sys.setprofile(None)
Example #12
Source File: profiler.py From pyFileFixity with MIT License | 5 votes |
def __init__(self, use_signal=True): if use_signal: try: signal.SIGALRM except AttributeError: raise SignalUnavailableError() self.interval = 0.001 self.last_profile_time = 0 self.stack_self_time = {} self.use_signal = use_signal
Example #13
Source File: test_threadsignals.py From Fluid-Designer with GNU General Public License v3.0 | 5 votes |
def test_main(): global signal_blackboard signal_blackboard = { signal.SIGUSR1 : {'tripped': 0, 'tripped_by': 0 }, signal.SIGUSR2 : {'tripped': 0, 'tripped_by': 0 }, signal.SIGALRM : {'tripped': 0, 'tripped_by': 0 } } oldsigs = registerSignals(handle_signals, handle_signals, handle_signals) try: run_unittest(ThreadSignals) finally: registerSignals(*oldsigs)
Example #14
Source File: ext_alarm.py From jdcloud-cli with Apache License 2.0 | 5 votes |
def set(self, time, msg): """ Set the application alarm to ``time`` seconds. If the time is exceeded ``signal.SIGALRM`` is raised. :param time: The time in seconds to set the alarm to. :param msg: The message to display if the alarm is triggered. """ LOG.debug('setting application alarm for %s seconds' % time) self.msg = msg signal.alarm(int(time))
Example #15
Source File: ext_alarm.py From jdcloud-cli with Apache License 2.0 | 5 votes |
def alarm_handler(app, signum, frame): if signum == signal.SIGALRM: app.log.error(app.alarm.msg)
Example #16
Source File: test_io.py From Fluid-Designer with GNU General Public License v3.0 | 5 votes |
def setUp(self): self.oldalrm = signal.signal(signal.SIGALRM, self.alarm_interrupt)
Example #17
Source File: test_signal.py From Fluid-Designer with GNU General Public License v3.0 | 5 votes |
def test_sigtimedwait_negative_timeout(self): signum = signal.SIGALRM self.assertRaises(ValueError, signal.sigtimedwait, [signum], -1.0)
Example #18
Source File: test_signal.py From Fluid-Designer with GNU General Public License v3.0 | 5 votes |
def test_sigtimedwait_poll(self): # check that polling with sigtimedwait works self.wait_helper(signal.SIGALRM, ''' def test(signum): import os os.kill(os.getpid(), signum) info = signal.sigtimedwait([signum], 0) if info.si_signo != signum: raise Exception('info.si_signo != %s' % signum) ''')
Example #19
Source File: test_signal.py From Fluid-Designer with GNU General Public License v3.0 | 5 votes |
def test_sigtimedwait(self): self.wait_helper(signal.SIGALRM, ''' def test(signum): signal.alarm(1) info = signal.sigtimedwait([signum], 10.1000) if info.si_signo != signum: raise Exception('info.si_signo != %s' % signum) ''')
Example #20
Source File: test_signal.py From Fluid-Designer with GNU General Public License v3.0 | 5 votes |
def test_sigwaitinfo(self): self.wait_helper(signal.SIGALRM, ''' def test(signum): signal.alarm(1) info = signal.sigwaitinfo([signum]) if info.si_signo != signum: raise Exception("info.si_signo != %s" % signum) ''')
Example #21
Source File: test_signal.py From Fluid-Designer with GNU General Public License v3.0 | 5 votes |
def test_sigwait(self): self.wait_helper(signal.SIGALRM, ''' def test(signum): signal.alarm(1) received = signal.sigwait([signum]) assert isinstance(received, signal.Signals), received if received != signum: raise Exception('received %s, not %s' % (received, signum)) ''')
Example #22
Source File: test_pty.py From ironpython2 with Apache License 2.0 | 5 votes |
def setUp(self): # isatty() and close() can hang on some platforms. Set an alarm # before running the test to make sure we don't hang forever. old_alarm = signal.signal(signal.SIGALRM, self.handle_sig) self.addCleanup(signal.signal, signal.SIGALRM, old_alarm) self.addCleanup(signal.alarm, 0) signal.alarm(10)
Example #23
Source File: test_signal.py From ironpython3 with Apache License 2.0 | 5 votes |
def check_wakeup(self, test_body, *signals, ordered=True): # use a subprocess to have only one thread code = """if 1: import fcntl import os import signal import struct signals = {!r} def handler(signum, frame): pass def check_signum(signals): data = os.read(read, len(signals)+1) raised = struct.unpack('%uB' % len(data), data) if not {!r}: raised = set(raised) signals = set(signals) if raised != signals: raise Exception("%r != %r" % (raised, signals)) {} signal.signal(signal.SIGALRM, handler) read, write = os.pipe() for fd in (read, write): flags = fcntl.fcntl(fd, fcntl.F_GETFL, 0) flags = flags | os.O_NONBLOCK fcntl.fcntl(fd, fcntl.F_SETFL, flags) signal.set_wakeup_fd(write) test() check_signum(signals) os.close(read) os.close(write) """.format(signals, ordered, test_body) assert_python_ok('-c', code)
Example #24
Source File: test_signal.py From Fluid-Designer with GNU General Public License v3.0 | 5 votes |
def setUp(self): self.hndl_called = False self.hndl_count = 0 self.itimer = None self.old_alarm = signal.signal(signal.SIGALRM, self.sig_alrm)
Example #25
Source File: test_signal.py From Fluid-Designer with GNU General Public License v3.0 | 5 votes |
def test_signum(self): self.check_wakeup("""def test(): import _testcapi signal.signal(signal.SIGUSR1, handler) _testcapi.raise_signal(signal.SIGUSR1) _testcapi.raise_signal(signal.SIGALRM) """, signal.SIGUSR1, signal.SIGALRM)
Example #26
Source File: test_signal.py From Fluid-Designer with GNU General Public License v3.0 | 5 votes |
def test_wakeup_fd_during(self): self.check_wakeup("""def test(): import select import time TIMEOUT_FULL = 10 TIMEOUT_HALF = 5 class InterruptSelect(Exception): pass def handler(signum, frame): raise InterruptSelect signal.signal(signal.SIGALRM, handler) signal.alarm(1) before_time = time.monotonic() # We attempt to get a signal during the select call try: select.select([read], [], [], TIMEOUT_FULL) except InterruptSelect: pass else: raise Exception("select() was not interrupted") after_time = time.monotonic() dt = after_time - before_time if dt >= TIMEOUT_HALF: raise Exception("%s >= %s" % (dt, TIMEOUT_HALF)) """, signal.SIGALRM)
Example #27
Source File: test_signal.py From Fluid-Designer with GNU General Public License v3.0 | 5 votes |
def test_wakeup_fd_early(self): self.check_wakeup("""def test(): import select import time TIMEOUT_FULL = 10 TIMEOUT_HALF = 5 class InterruptSelect(Exception): pass def handler(signum, frame): raise InterruptSelect signal.signal(signal.SIGALRM, handler) signal.alarm(1) # We attempt to get a signal during the sleep, # before select is called try: select.select([], [], [], TIMEOUT_FULL) except InterruptSelect: pass else: raise Exception("select() was not interrupted") before_time = time.monotonic() select.select([read], [], [], TIMEOUT_FULL) after_time = time.monotonic() dt = after_time - before_time if dt >= TIMEOUT_HALF: raise Exception("%s >= %s" % (dt, TIMEOUT_HALF)) """, signal.SIGALRM)
Example #28
Source File: test_signal.py From Fluid-Designer with GNU General Public License v3.0 | 5 votes |
def check_wakeup(self, test_body, *signals, ordered=True): # use a subprocess to have only one thread code = """if 1: import _testcapi import os import signal import struct signals = {!r} def handler(signum, frame): pass def check_signum(signals): data = os.read(read, len(signals)+1) raised = struct.unpack('%uB' % len(data), data) if not {!r}: raised = set(raised) signals = set(signals) if raised != signals: raise Exception("%r != %r" % (raised, signals)) {} signal.signal(signal.SIGALRM, handler) read, write = os.pipe() os.set_blocking(write, False) signal.set_wakeup_fd(write) test() check_signum(signals) os.close(read) os.close(write) """.format(tuple(map(int, signals)), ordered, test_body) assert_python_ok('-c', code)
Example #29
Source File: test_socket.py From Fluid-Designer with GNU General Public License v3.0 | 5 votes |
def testInterruptedTimeout(self): # XXX I don't know how to do this test on MSWindows or any other # plaform that doesn't support signal.alarm() or os.kill(), though # the bug should have existed on all platforms. self.serv.settimeout(5.0) # must be longer than alarm class Alarm(Exception): pass def alarm_handler(signal, frame): raise Alarm old_alarm = signal.signal(signal.SIGALRM, alarm_handler) try: signal.alarm(2) # POSIX allows alarm to be up to 1 second early try: foo = self.serv.accept() except socket.timeout: self.fail("caught timeout instead of Alarm") except Alarm: pass except: self.fail("caught other exception instead of Alarm:" " %s(%s):\n%s" % (sys.exc_info()[:2] + (traceback.format_exc(),))) else: self.fail("nothing caught") finally: signal.alarm(0) # shut off alarm except Alarm: self.fail("got Alarm in wrong place") finally: # no alarm can be pending. Safe to restore old handler. signal.signal(signal.SIGALRM, old_alarm)
Example #30
Source File: test_io.py From Fluid-Designer with GNU General Public License v3.0 | 5 votes |
def tearDown(self): signal.signal(signal.SIGALRM, self.oldalrm)