Example #1
0
 def _maybe_reload_module(self, module, force_reload=False, reloader=None):
     if module not in sys.modules:
         logger.debug('importing module %s', module)
         return self.app.loader.import_from_cwd(module)
     elif force_reload:
         logger.debug('reloading module %s', module)
         return reload_from_cwd(sys.modules[module], reloader)
Example #2
0
    def start(self):
        """Starts the workers main loop."""
        self.on_start()
        self._state = self.RUN
        if self.pidfile:
            self.pidlock = platforms.create_pidlock(self.pidfile)
        try:
            for i, component in enumerate(self.components):
                logger.debug('Starting %s...', qualname(component))
                self._running = i + 1
                if component:
                    component.start()
                logger.debug('%s OK!', qualname(component))
        except SystemTerminate:
            self.terminate()
        except Exception as exc:
            logger.error('Unrecoverable error: %r', exc,
                         exc_info=True)
            self.stop()
        except (KeyboardInterrupt, SystemExit):
            self.stop()

        try:
            # Will only get here if running green,
            # makes sure all greenthreads have exited.
            self._shutdown_complete.wait()
        except IGNORE_ERRORS:
            pass
Example #3
0
    def start(self):
        """Starts the workers main loop."""
        self.on_start()
        self._state = self.RUN
        if self.pidfile:
            self.pidlock = platforms.create_pidlock(self.pidfile)
        try:
            for i, component in enumerate(self.components):
                logger.debug('Starting %s...', qualname(component))
                self._running = i + 1
                if component:
                    component.start()
                logger.debug('%s OK!', qualname(component))
        except SystemTerminate:
            self.terminate()
        except Exception as exc:
            logger.error('Unrecoverable error: %r', exc, exc_info=True)
            self.stop()
        except (KeyboardInterrupt, SystemExit):
            self.stop()

        try:
            # Will only get here if running green,
            # makes sure all greenthreads have exited.
            self._shutdown_complete.wait()
        except IGNORE_ERRORS:
            pass
Example #4
0
 def _maybe_reload_module(self, module, force_reload=False, reloader=None):
     if module not in sys.modules:
         logger.debug('importing module %s', module)
         return self.app.loader.import_from_cwd(module)
     elif force_reload:
         logger.debug('reloading module %s', module)
         return reload_from_cwd(sys.modules[module], reloader)
Example #5
0
    def _shutdown(self, warm=True):
        what = 'Stopping' if warm else 'Terminating'

        if self._state in (self.CLOSE, self.TERMINATE):
            return

        self.app.loader.shutdown_worker()

        if self.pool:
            self.pool.close()

        if self._state != self.RUN or self._running != len(self.components):
            # Not fully started, can safely exit.
            self._state = self.TERMINATE
            self._shutdown_complete.set()
            return
        self._state = self.CLOSE

        for component in reversed(self.components):
            logger.debug('%s %s...', what, qualname(component))
            if component:
                stop = component.stop
                if not warm:
                    stop = getattr(component, 'terminate', None) or stop
                stop()

        self.timer.stop()
        self.consumer.close_connection()

        if self.pidlock:
            self.pidlock.release()
        self._state = self.TERMINATE
        self._shutdown_complete.set()
Example #6
0
    def reload(self, modules=None, reload=False, reloader=None):
        modules = self.app.loader.task_modules if modules is None else modules
        imp = self.app.loader.import_from_cwd

        for module in set(modules or ()):
            if module not in sys.modules:
                logger.debug('importing module %s', module)
                imp(module)
            elif reload:
                logger.debug('reloading module %s', module)
                reload_from_cwd(sys.modules[module], reloader)
        self.pool.restart()
Example #7
0
    def reload(self, modules=None, reload=False, reloader=None):
        modules = self.app.loader.task_modules if modules is None else modules
        imp = self.app.loader.import_from_cwd

        for module in set(modules or ()):
            if module not in sys.modules:
                logger.debug('importing module %s', module)
                imp(module)
            elif reload:
                logger.debug('reloading module %s', module)
                reload_from_cwd(sys.modules[module], reloader)
        self.pool.restart()
    def graceful_stop(self):
        for step in self.consumer.steps:
            if type(step) not in self.requires:
                if hasattr(step, 'stop'):
                    logger.debug('| Worker: stopping {}'.format(step))
                    step.stop(self.consumer)

        def fake_action(*args, **kwargs):
            msg = 'Worker: action is disabled while worker is in `stopping` state'
            logger.info(msg)
            raise Exception(msg)

        for action in self.get_restricted_control_actions():
            Panel.data[action] = fake_action
Example #9
0
    def graceful_stop(self):
        for step in self.consumer.steps:
            if type(step) not in self.requires:
                if hasattr(step, 'stop'):
                    logger.debug('| Worker: stopping {}'.format(step))
                    step.stop(self.consumer)

        def fake_action(*args, **kwargs):
            msg = 'Worker: action is disabled while worker is in `stopping` state'
            logger.info(msg)
            raise Exception(msg)

        for action in self.get_restricted_control_actions():
            Panel.data[action] = fake_action
Example #10
0
    def reload(self, modules=None, reload=False, reloader=None):
        modules = self.app.loader.task_modules if modules is None else modules
        imp = self.app.loader.import_from_cwd

        for module in set(modules or ()):
            if module not in sys.modules:
                logger.debug('importing module %s', module)
                imp(module)
            elif reload:
                logger.debug('reloading module %s', module)
                reload_from_cwd(sys.modules[module], reloader)

        if self.consumer:
            self.consumer.update_strategies()
            self.consumer.reset_rate_limits()
        try:
            self.pool.restart()
        except NotImplementedError:
            pass
Example #11
0
    def reload(self, modules=None, reload=False, reloader=None):
        modules = self.app.loader.task_modules if modules is None else modules
        imp = self.app.loader.import_from_cwd

        for module in set(modules or ()):
            if module not in sys.modules:
                logger.debug('importing module %s', module)
                imp(module)
            elif reload:
                logger.debug('reloading module %s', module)
                reload_from_cwd(sys.modules[module], reloader)

        if self.consumer:
            self.consumer.update_strategies()
            self.consumer.reset_rate_limits()
        try:
            self.pool.restart()
        except NotImplementedError:
            pass
Example #12
0
    def _shutdown(self, warm=True):
        what = 'Stopping' if warm else 'Terminating'
        socket_timeout = socket.getdefaulttimeout()
        socket.setdefaulttimeout(SHUTDOWN_SOCKET_TIMEOUT)  # Issue 975

        if self._state in (self.CLOSE, self.TERMINATE):
            return

        self.app.loader.shutdown_worker()

        if self.pool:
            self.pool.close()

        if self._state != self.RUN or self._running != len(self.components):
            # Not fully started, can safely exit.
            self._state = self.TERMINATE
            self._shutdown_complete.set()
            return
        self._state = self.CLOSE

        for component in reversed(self.components):
            logger.debug('%s %s...', what, qualname(component))
            if component:
                stop = component.stop
                if not warm:
                    stop = getattr(component, 'terminate', None) or stop
                stop()

        self.timer.stop()
        self.consumer.close_connection()

        if self.pidlock:
            self.pidlock.release()
        self._state = self.TERMINATE
        socket.setdefaulttimeout(socket_timeout)
        self._shutdown_complete.set()
Example #13
0
 def on_timer_tick(self, delay):
     logger.debug('Timer wake-up! Next ETA %s secs.', delay)
Example #14
0
 def on_timer_tick(self, delay):
     logger.debug('Timer wake-up! Next eta %s secs.', delay)
Example #15
0
 def on_timer_tick(self, delay):
     logger.debug("Timer wake-up! Next eta %s secs.", delay)
Example #16
0
 def on_error(self, exc, intervals, _):
     msg = "Critical object is not available: %s\nTrying to consume again %s..."
     interval = next(intervals)
     logger.debug(msg, exc, humanize_seconds(interval, 'in', ' '))
     return interval