RASCSI/python/oled/src/interrupt_handler.py

42 lines
942 B
Python

"""
Linux interrupt handling module
"""
import signal
class GracefulInterruptHandler:
"""
Class for handling Linux signal interrupts
"""
def __init__(self, signals=(signal.SIGINT, signal.SIGTERM)):
self.signals = signals
self.original_handlers = {}
self.interrupted = False
self.released = False
def __enter__(self):
for sig in self.signals:
self.original_handlers[sig] = signal.getsignal(sig)
signal.signal(sig, self.handler)
return self
def handler(self, signum, frame):
self.release()
self.interrupted = True
def __exit__(self, exception_type, exception_value, traceback):
self.release()
def release(self):
if self.released:
return False
for sig in self.signals:
signal.signal(sig, self.original_handlers[sig])
self.released = True
return True