En el apio, ¿cómo ejecuto una tarea y luego hago que esa tarea ejecute otra tarea y la mantenga en marcha?

#tasks.py from celery.task import Task class Randomer(Task): def run(self, **kwargs): #run Randomer again!!! return random.randrange(0,1000000) >>> from tasks import Randomer >>> r = Randomer() >>> r.delay() 

En este momento, ejecuto la tarea simple. Y devuelve un número aleatorio. Pero, ¿cómo hago para que ejecute otra tarea, dentro de esa tarea ?

Puede llamar a other_task.delay() desde dentro de Randomer.run ; en este caso, es posible que desee establecer Randomer.ignore_result = True (y other_task.ignore_result , y así sucesivamente).

Recuerde que las tareas de apio delay devoluciones al instante, por lo que si no pone ningún límite o tiempo de espera en las llamadas anidadas (o llamadas recursivas), puede alcanzar la fusión rápidamente.

En lugar de la recursión o las tareas anidadas, debe considerar un bucle infinito para evitar el desbordamiento de la stack (no es un juego de palabras).

 from celery.task import Task class Randomer(Task): def run(self, **kwargs): while True: do_something(**kwargs) time.sleep(600) 

Puede encadenar las subtareas como se describe aquí: http://docs.celeryproject.org/en/latest/userguide/canvas.html#chains