/usr/lib/python2.7/dist-packages/stopit/signalstop.py is in python-stopit 1.1.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | # -*- coding: utf-8 -*-
"""
=================
stopit.signalstop
=================
Control the timeout of blocks or callables with a context manager or a
decorator. Based on the use of signal.SIGALRM
"""
import signal
from .utils import TimeoutException, BaseTimeout, base_timeoutable
class SignalTimeout(BaseTimeout):
"""Context manager for limiting in the time the execution of a block
using signal.SIGALRM Unix signal.
See :class:`stopit.utils.BaseTimeout` for more information
"""
def __init__(self, seconds, swallow_exc=True):
seconds = int(seconds) # alarm delay for signal MUST be int
super(SignalTimeout, self).__init__(seconds, swallow_exc)
def handle_timeout(self, signum, frame):
self.state = BaseTimeout.TIMED_OUT
raise TimeoutException('Block exceeded maximum timeout '
'value (%d seconds).' % self.seconds)
# Required overrides
def setup_interrupt(self):
signal.signal(signal.SIGALRM, self.handle_timeout)
signal.alarm(self.seconds)
def suppress_interrupt(self):
signal.alarm(0)
signal.signal(signal.SIGALRM, signal.SIG_DFL)
class signal_timeoutable(base_timeoutable): #noqa
"""A function or method decorator that raises a ``TimeoutException`` to
decorated functions that should not last a certain amount of time.
this one uses ``SignalTimeout`` context manager.
See :class:`.utils.base_timoutable`` class for further comments.
"""
to_ctx_mgr = SignalTimeout
|