run results celery_result_backend beat app python django task celery

python - results - Tarea de apio que ejecuta más tareas



django-celery-results (3)

Estoy usando celerybeat para iniciar una tarea principal que inicia una serie de tareas secundarias. Ya tengo ambas tareas escritas.

¿Hay alguna manera de hacer esto fácilmente? ¿El apio permite que las tareas se ejecuten desde dentro de las tareas?

Mi ejemplo:

@task def compute(users=None): if users is None: users = User.objects.all() tasks = [] for user in users: tasks.append(compute_for_user.subtask((user.id,))) job = TaskSet(tasks) job.apply_async() # raises a IOError: Socket closed @task def compute_for_user(user_id): #do some stuff

se llama a compute desde celerybeat, pero causa un IOError cuando intenta ejecutar apply_async . ¿Algunas ideas?


Para responder a sus preguntas de apertura: a partir de la versión 2.0, Celery proporciona una manera fácil de comenzar tareas desde otras tareas. Lo que está llamando "tareas secundarias" es lo que llama "subtareas". Consulte la documentación de Conjuntos de tareas, Subtareas y Devolución de llamadas, que @Paperino tuvo la amabilidad de vincular.

Para la versión 3.0, Celery cambió el uso de groups para este y otros tipos de comportamiento.

Su código muestra que ya está familiarizado con esta interfaz. Su pregunta real parece ser: "¿Por qué recibo un IOError ''Socket Closed'' cuando intento ejecutar mi conjunto de subtareas?" No creo que nadie pueda responder eso, porque no ha proporcionado suficiente información sobre su programa. Su fragmento no se puede ejecutar tal como está, por lo que no podemos examinar el problema que está teniendo para nosotros. Por favor, publique el stacktrace provisto con el IOError , y con un poco de suerte, alguien que pueda ayudarlo con su crasher vendrá.


Puede usar algo como esto (Soporte en 3.0)

g = group(compute_for_user.s(user.id) for user in users) g.apply_async()