|
@@ -9,6 +9,7 @@ from celery import registry
|
|
|
from celery import platforms
|
|
|
from celery import signals
|
|
|
from celery.app import app_or_default
|
|
|
+from celery.exceptions import SystemTerminate
|
|
|
from celery.log import SilenceRepeated
|
|
|
from celery.utils import noop, instantiate
|
|
|
|
|
@@ -192,23 +193,10 @@ class WorkController(object):
|
|
|
callback=self.process_task,
|
|
|
logger=self.logger)
|
|
|
|
|
|
- class DummyTimer(object):
|
|
|
-
|
|
|
- def start(self):
|
|
|
- pass
|
|
|
-
|
|
|
- def stop(self):
|
|
|
- pass
|
|
|
-
|
|
|
- def clear(self):
|
|
|
- pass
|
|
|
-
|
|
|
-
|
|
|
- #self.scheduler = instantiate(self.eta_scheduler_cls,
|
|
|
- # precision=eta_scheduler_precision,
|
|
|
- # on_error=self.on_timer_error,
|
|
|
- # on_tick=self.on_timer_tick)
|
|
|
- self.scheduler = DummyTimer()
|
|
|
+ self.scheduler = instantiate(self.eta_scheduler_cls,
|
|
|
+ precision=eta_scheduler_precision,
|
|
|
+ on_error=self.on_timer_error,
|
|
|
+ on_tick=self.on_timer_tick)
|
|
|
|
|
|
self.beat = None
|
|
|
if self.embed_clockservice:
|
|
@@ -248,7 +236,7 @@ class WorkController(object):
|
|
|
self.logger.debug("Starting thread %s..." % (
|
|
|
component.__class__.__name__))
|
|
|
self._running = i + 1
|
|
|
- component.start()
|
|
|
+ self.pool.blocking(component.start)
|
|
|
|
|
|
def process_task(self, wrapper):
|
|
|
"""Process task by sending it to the pool of workers."""
|
|
@@ -259,16 +247,20 @@ class WorkController(object):
|
|
|
except Exception, exc:
|
|
|
self.logger.critical("Internal error %s: %s\n%s" % (
|
|
|
exc.__class__, exc, traceback.format_exc()))
|
|
|
+ except SystemTerminate:
|
|
|
+ self.terminate()
|
|
|
+ raise SystemExit()
|
|
|
except (SystemExit, KeyboardInterrupt):
|
|
|
self.stop()
|
|
|
+ raise SystemExit()
|
|
|
|
|
|
def stop(self):
|
|
|
"""Graceful shutdown of the worker server."""
|
|
|
- self._shutdown(warm=True)
|
|
|
+ self.pool.blocking(self._shutdown, warm=True)
|
|
|
|
|
|
def terminate(self):
|
|
|
"""Not so graceful shutdown of the worker server."""
|
|
|
- self._shutdown(warm=False)
|
|
|
+ self.pool.blocking(self._shutdown, warm=False)
|
|
|
|
|
|
def _shutdown(self, warm=True):
|
|
|
what = (warm and "stopping" or "terminating").capitalize()
|