jw-python/tools/python/jwutils/Signals.py
Jan Lindemann c96ffe52c0 Add Process and Signals support
Signed-off-by: Jan Lindemann <jan@janware.com>
2019-10-29 11:25:03 +01:00

34 lines
923 B
Python

from abc import ABC, abstractmethod
_handled_signals = {}
def _signal_handler(signal, frame):
if not signal in _handled_signals.keys():
return
for h in _handled_signals[signal]:
h.func(signal, *h.args)
class Signals:
class Handler:
def __init__(self, func, args):
self.func = func
self.args = args
def __init(self):
pass
@classmethod
@abstractmethod
def _add_handler(self, signal, handler):
raise Exception("_add_handler() is not reimplemented")
@classmethod
def add_handler(cls, signals, handler, *args):
for signal in signals:
h = Signals.Handler(handler, args)
if not signal in _handled_signals.keys():
_handled_signals[signal] = [h]
cls._add_signal_handler(signal, _signal_handler)
else:
_handled_signals[signal].add(h)