def install_shutdown_handlers(function): """Install the given function as a signal handler for all common shutdown signals (such as SIGINT, SIGTERM, etc). If override_sigint is ``False`` the SIGINT handler won't be install if there is already a handler in place (e.g. Pdb) """ reactor._handleSignals() #TD:Need to check how this part works and what is the target here. signal.signal(signal.SIGTERM, function)
def install_shutdown_handlers(function, override_sigint=True): """Install the given function as a signal handler for all common shutdown signals (such as SIGINT, SIGTERM, etc). If override_sigint is ``False`` the SIGINT handler won't be install if there is already a handler in place (e.g. Pdb) """ reactor._handleSignals() signal.signal(signal.SIGTERM, function) if signal.getsignal(signal.SIGINT) == signal.default_int_handler or \ override_sigint: signal.signal(signal.SIGINT, function) # Catch Ctrl-Break in windows if hasattr(signal, "SIGBREAK"): signal.signal(signal.SIGBREAK, function)
def install_shutdown_handlers(function, override_sigint=True): """Install the given function as a signal handler for all common shutdown signals (such as SIGINT, SIGTERM, etc). If override_sigint is ``False`` the SIGINT handler won't be install if there is already a handler in place (e.g. Pdb) """ reactor._handleSignals() signal.signal(signal.SIGTERM, function) # 这个是关闭程序的信号 if signal.getsignal(signal.SIGINT) == signal.default_int_handler or \ override_sigint: signal.signal(signal.SIGINT, function) # 这个是接收ctrl+c信号的 # Catch Ctrl-Break in windows if hasattr(signal, 'SIGBREAK'): signal.signal(signal.SIGBREAK, function)
def run(self): """Starts Twisted reactor, invokes attached workflow's run() and does periodic status updates. """ self._pre_run() if self.interactive: if not reactor.running and self._reactor_thread is None: reactor._handleSignals() self._reactor_thread = threading.Thread( name="TwistedReactor", target=reactor.run, kwargs={"installSignalHandlers": False}) self._reactor_thread.start() return try: reactor.run() except: self.exception("Reactor malfunction. The whole facility is going " "to be destroyed in 10 minutes. Personnel " "evacuation has been started.") finally: with self._lock: self._running = False
def start_reactor(): """Start a ```Twisted``` reactor, in a background thread.""" from twisted.internet import reactor as _reactor import threading event = threading.Event() def _start(): event.set() _reactor.run(installSignalHandlers=0) import threading t = threading.Thread(target=_start, group=None) t.daemon = True t.start() event.wait(None) if not IS_WINDOWS: # noqa: no-cover _reactor._handleSignals() # noqa: no-cover return _reactor
def __init__(self, settings=None): super(CrawlerProcess, self).__init__(settings) reactor._handleSignals()