estoy usando Django Apio con Redis para ejecutar algunas tareas como esta:acorde django-apio, celery.chord_unlock mantiene siempre la ejecución de no llamar a la devolución de llamada proporcionado
header = [
tasks.invalidate_user.subtask(args = (user)),
tasks.invalidate_details.subtask(args = (user))
]
callback = tasks.rebuild.subtask()
chord(header)(callback)
Así que básicamente el mismo que se indica en documentation.
Mi problema es que cuando se llama a este acorde de tarea, celery.chord_unlock
la tarea sigue intentándolo para siempre. Las tareas en header
finalizan correctamente, pero debido a chord_unlock
que nunca se ha realizado, callback
nunca se llama.
Supongo que mi problema es no poder detectar que las tareas de header
han finalizado, he recurrido a la documentación para ver cómo se puede personalizar esto. He encontrado a section, describiendo cómo se implementa la sincronización, hay un ejemplo proporcionado, lo que me falta es cómo puedo llamar a esa función de ejemplo (es decir, ¿hay una señal para esto?).
Además hay una nota que este método no se utiliza con Redis backend:
Esto es usado por todos los backends de Resultados excepto Redis y Memcached, que incrementar un contador después de cada tarea en la cabecera, a continuación, la aplicación de la devolución de llamada cuando el contador excede el número de tareas en el conjunto.
Pero también dice que el enfoque Redis es mejor:
El enfoque Redis y Memcached es una solución mucho mejor
¿Qué enfoque es que? ¿Cómo se implementa?
Entonces, ¿por qué no se hace chord_unlock
y cómo puedo hacer que detecte header
tareas finalizadas?
que estoy usando: Django 1.4, 2.5.3 apio, apio-django 2.5.5, 2.4.12 Redis