Browse Source

control.broadcast: Can now specify the channel to use for sending the broadcast message

Ask Solem 14 years ago
parent
commit
c87d6a7f12
1 changed files with 11 additions and 6 deletions
  1. 11 6
      celery/task/control.py

+ 11 - 6
celery/task/control.py

@@ -168,7 +168,7 @@ class Control(object):
 
     def broadcast(self, command, arguments=None, destination=None,
             connection=None, connect_timeout=None, reply=False, timeout=1,
-            limit=None, callback=None):
+            limit=None, callback=None, channel=None):
         """Broadcast a control command to the celery workers.
 
         :param command: Name of command to send.
@@ -186,14 +186,19 @@ class Control(object):
             received.
 
         """
-        def _do_broadcast(connection=None, connect_timeout=None):
+        def _do_broadcast(connection=None, connect_timeout=None,
+                          channel=None):
             return self.mailbox(connection)._broadcast(command, arguments,
                                                        destination, reply,
                                                        timeout, limit,
-                                                       callback)
-
-        return self.app.with_default_connection(_do_broadcast)(
-                connection=connection, connect_timeout=connect_timeout)
+                                                       callback,
+                                                       channel=channel)
+
+        if channel:
+            return _do_broadcast(connection, connect_timeout, channel)
+        else:
+            return self.app.with_default_connection(_do_broadcast)(
+                    connection=connection, connect_timeout=connect_timeout)
 
 
 _default_control = Control(app_or_default())