Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
 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
Exemplo n.º 5
0
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
Exemplo n.º 6
0
 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
Exemplo n.º 7
0
 def __init__(self, settings=None):
     super(CrawlerProcess, self).__init__(settings)
     reactor._handleSignals()