Source code for gaffer.sig_handler
# -*- coding: utf-8 -
#
# This file is part of gaffer. See the NOTICE for more information.
import signal
import pyuv
[docs]class BaseSigHandler(object):
""" A simple gaffer application to handle signals """
QUIT_SIGNALS = (signal.SIGQUIT, signal.SIGTERM, signal.SIGINT)
def __init__(self):
self._sig_handler = None
[docs] def start(self, loop):
self.loop = loop
need_unref = False
if hasattr(pyuv, "SignalChecker"):
self._sig_handler = pyuv.SignalChecker(self.loop)
else:
self._sig_handler = pyuv.Signal(self.loop)
need_unref = True
# quit signals handling
for signum in self.QUIT_SIGNALS:
signal.signal(signum, self.handle_quit)
# reload signal
signal.signal(signal.SIGHUP, self.handle_reload)
self._sig_handler.start()
if need_unref:
self._sig_handler.unref()
[docs] def stop(self):
try:
self._sig_handler.stop()
except:
pass
[docs] def restart(self):
# we never restart, just return
return
[docs] def handle_quit(self, handle, *args):
raise NotImplementedError
[docs] def handle_reload(self, handle, *args):
raise NotImplementedError
[docs]class SigHandler(BaseSigHandler):
""" A simple gaffer application to handle signals """
[docs] def start(self, loop, manager):
self.manager = manager
super(SigHandler, self).start(loop)
[docs] def handle_quit(self, handle, *args):
self.manager.stop()
[docs] def handle_reload(self, handle, *args):
self.manager.restart()