Jelajahi Sumber

celeryd now sends the celeryd_init signal

Ask Solem 13 tahun lalu
induk
melakukan
3cf2ad6a25
3 mengubah file dengan 14 tambahan dan 6 penghapusan
  1. 1 1
      Changelog
  2. 8 2
      celery/apps/worker.py
  3. 5 3
      docs/userguide/signals.rst

+ 1 - 1
Changelog

@@ -2232,9 +2232,9 @@ News
         from logging.config import fileConfig
         from celery import signals
 
+        @signals.setup_logging.connect
         def setup_logging(**kwargs):
             fileConfig("logging.conf")
-        signals.setup_logging.connect(setup_logging)
 
     If there are no receivers for this signal, the logging subsystem
     will be configured using the :option:`--loglevel`/:option:`--logfile`

+ 8 - 2
celery/apps/worker.py

@@ -81,10 +81,16 @@ class Worker(configurated):
             queues=None, include=None, app=None, pidfile=None,
             autoscale=None, autoreload=False, **kwargs):
         self.app = app = app_or_default(app)
+        self.hostname = hostname or socket.gethostname()
+
+        # this signal can be used to set up configuration for
+        # workers by name.
+        signals.celeryd_init.send(sender=self.hostname, instance=self,
+                                  conf=self.app.conf)
+
         self.setup_defaults(kwargs, namespace="celeryd")
         if not self.concurrency:
             self.concurrency = cpu_count()
-        self.hostname = hostname or socket.gethostname()
         self.discard = discard
         self.embed_clockservice = embed_clockservice
         if self.app.IS_WINDOWS and self.embed_clockservice:
@@ -219,6 +225,7 @@ class Worker(configurated):
                                     autoreload=self.autoreload,
                                     **self.confopts_as_dict())
         self.install_platform_tweaks(worker)
+        signals.worker_init.send(sender=worker)
         worker.start()
 
     def install_platform_tweaks(self, worker):
@@ -242,7 +249,6 @@ class Worker(configurated):
         install_worker_int_handler(worker)
         install_cry_handler(worker.logger)
         install_rdb_handler()
-        signals.worker_init.send(sender=worker)
 
     def osx_proxy_detection_workaround(self):
         """See http://github.com/ask/celery/issues#issue/161"""

+ 5 - 3
docs/userguide/signals.rst

@@ -28,12 +28,11 @@ Example connecting to the :signal:`task_sent` signal:
 
     from celery.signals import task_sent
 
+    @task_sent.connect
     def task_sent_handler(sender=None, task_id=None, task=None, args=None,
                           kwargs=None, \*\*kwds):
         print("Got signal task_sent for task id %s" % (task_id, ))
 
-    task_sent.connect(task_sent_handler)
-
 
 Some signals also have a sender which you can filter by. For example the
 :signal:`task_sent` signal uses the task name as a sender, so you can
@@ -43,7 +42,10 @@ has been sent by providing the `sender` argument to
 
 .. code-block:: python
 
-    task_sent.connect(task_sent_handler, sender="tasks.add")
+    @task_sent.connect(task_sent_handler, sender="tasks.add")
+    def task_sent_handler(sender=None, task_id=None, task=None, args=None,
+                          kwargs=None, \*\*kwds):
+        print("Got signal task_sent for task id %s" % (task_id, ))
 
 .. _signal-ref: