Browse Source

canvas: attempt to use _freeze to fix some bugs

Ask Solem 12 years ago
parent
commit
cf9a3f0921
2 changed files with 7 additions and 4 deletions
  1. 2 2
      celery/app/builtins.py
  2. 5 2
      celery/canvas.py

+ 2 - 2
celery/app/builtins.py

@@ -367,10 +367,10 @@ def add_chord_task(app):
                 body.options['group_id'] = group_id
             [body.link(s) for s in options.pop('link', [])]
             [body.link_error(s) for s in options.pop('link_error', [])]
-            callback_id = body.options.setdefault('task_id', task_id or uuid())
+            callback_id = body.options.get('task_id') or task_id or uuid()
+            body_result = body._freeze(callback_id)
             parent = super(Chord, self).apply_async((header, body, args),
                                                     kwargs, **options)
-            body_result = self.AsyncResult(callback_id)
             body_result.parent = parent
             return body_result
 

+ 5 - 2
celery/canvas.py

@@ -483,8 +483,11 @@ class chord(Signature):
         kwargs = dict(self.kwargs, body=body, **kwargs)
         if _chord.app.conf.CELERY_ALWAYS_EAGER:
             return self.apply((), kwargs)
-        callback_id = body.options.setdefault('task_id', uuid())
-        return _chord.AsyncResult(callback_id, parent=_chord(**kwargs))
+        callback_id = body.options.get('task_id') or uuid()
+        res = body._freeze(callback_id)
+        parent = _chord(**kwargs)
+        res.parent = parent
+        return res
 
     def clone(self, *args, **kwargs):
         s = Signature.clone(self, *args, **kwargs)