Apio no se está ejecutando callback de acorde

Después de ver muchos artículos acerca de las devoluciones de llamada de acordes que no se ejecutan y probar sus soluciones, todavía no puedo hacer que funcione. De hecho, el método chord_unlock tampoco se está ejecutando por alguna razón.

apio.py

from __future__ import absolute_import from celery import Celery app = Celery('sophie', broker='redis://localhost:6379/2', backend='redis://localhost:6379/2', include=['sophie.lib.chord_test']) app.conf.update( CELERY_ACCEPT_CONTENT=["json"], CELERY_TASK_SERIALIZER="json", CELERY_TRACK_STARTED=True, CELERYD_PREFETCH_MULTIPLIER=1, # NO PREFETCHING OF TASKS BROKER_TRANSPORT_OPTIONS = { 'priority_steps': [0, 1] # ALLOW ONLY 2 TASK PRIORITIES } ) if __name__ == '__main__': app.start() 

chord_test.py

 from __future__ import absolute_import from sophie.celery import app from celery import chord @app.task(name='sophie.lib.add') def add(x, y): return x + y @app.task(name='sophie.lib.tsum') def tsum(numbers): return sum(numbers) if __name__ == '__main__': tasks = [add.s(100, 100), add.s(200, 200)] chord(tasks, tsum.s()).apply_async() 

La salida de mi archivo de registro del trabajador es la siguiente

 $ celery worker -l info --app=sophie.celery -n worker1.%h -------------- celery@worker1.vagrant-ubuntu-11 v3.1.6 (Cipater) ---- **** ----- --- * *** * -- Linux-3.0.0-12-server-x86_64-with-Ubuntu-11.10-oneiric -- * - **** --- - ** ---------- [config] - ** ---------- .> broker: redis://localhost:6379/2 - ** ---------- .> app: sophie:0x3554250 - ** ---------- .> concurrency: 1 (prefork) - *** --- * --- .> events: OFF (enable -E to monitor this worker) -- ******* ---- --- ***** ----- [queues] -------------- .> celery exchange=celery(direct) key=celery [tasks] . sophie.lib.add . sophie.lib.tsum [2013-12-12 19:37:26,499: INFO/MainProcess] Connected to redis://localhost:6379/2 [2013-12-12 19:37:26,506: INFO/MainProcess] mingle: searching for neighbors [2013-12-12 19:37:27,512: INFO/MainProcess] mingle: all alone [2013-12-12 19:37:27,527: WARNING/MainProcess] celery@worker1.vagrant-ubuntu-11 ready. [2013-12-12 19:37:29,723: INFO/MainProcess] Received task: sophie.lib.add[b7d504c1-217f-43a9-b57e-86f0fcbdbe22] [2013-12-12 19:37:29,734: INFO/MainProcess] Task sophie.lib.add[b7d504c1-217f-43a9-b57e-86f0fcbdbe22] succeeded in 0.009769904 00522s: 200 [2013-12-12 19:37:29,735: INFO/MainProcess] Received task: sophie.lib.add[eb01a73e-f6c8-401d-8049-6cdbc5f0bd90] [2013-12-12 19:37:29,737: INFO/MainProcess] Task sophie.lib.add[eb01a73e-f6c8-401d-8049-6cdbc5f0bd90] succeeded in 0.001446505 00442s: 400 

No hay chord_unlock siendo llamado en absoluto. Un poco más de salida para dar más contexto:

 $ sudo pip freeze | egrep 'celery|kombu|billiard' billiard==3.3.0.12 celery==3.1.6 kombu==3.0.7 $ uname -a Linux vagrant-ubuntu-11 3.0.0-12-server #20-Ubuntu SMP Fri Oct 7 16:36:30 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux $ redis-server --version Redis server version 2.2.11 (00000000:0) 

La documentación de los acordes utiliza la siguiente syntax para el acorde:

  result = chord(header)(callback) 

Para que pudieras hacer:

  chord(tasks)(tsum.s()) 

Hay una sección de Notas importantes debajo de la documentación de acordes que dice:

Las tareas utilizadas dentro de un acorde no deben ignorar sus resultados. En la práctica, esto significa que debe habilitar un CELERY_RESULT_BACKEND para poder usar acordes. Además, si CELERY_IGNORE_RESULT se establece en Verdadero en su configuración, asegúrese de que las tareas individuales que se usarán dentro del acorde estén definidas con ignore_result = False . Esto se aplica tanto a las subclases de tareas como a las tareas decoradas.

Incluso cuando seguí las recomendaciones, la callback del acorde no se ejecuta, pero puede ayudar a otros.

EDITAR:

¡Encontré lo que era en mi caso! El acorde no admite completamente la especificación del nombre de la cola en todos los casos: https://github.com/celery/celery/issues/2085