python - font - plt.title bold
Agregue n tareas a la cola de apio y espere los resultados (3)
Yo añadiría múltiples tareas a la cola de apio y esperaría los resultados. Tengo varias ideas de cómo lograría esto utilizando algún tipo de almacenamiento compartido (memcached, redis, db, etc.), sin embargo, pensé que es algo que Celery puede manejar automáticamente pero no puedo encontrar ningún recurso en línea.
Ejemplo de código
def do_tasks(b):
for a in b:
c.delay(a)
return c.all_results_some_how()
Para Celery> = 3.0 , TaskSet está en deprecated en favor de group .
from celery import group
from tasks import add
job = group([
add.s(2, 2),
add.s(4, 4),
add.s(8, 8),
add.s(16, 16),
add.s(32, 32),
])
Iniciar el grupo en el fondo:
result = job.apply_async()
Espere:
result.join()
Tengo la corazonada de que en realidad no están deseando el retraso, sino la característica asíncrona de Celery.
Creo que realmente quieres un TaskSet :
from celery.task.sets import TaskSet
from someapp.tasks import sometask
def do_tasks(b):
job = TaskSet([sometask.subtask((a,)) for a in b])
result = job.apply_async()
# might want to handle result.successful() == False
return result.join()
Task.delay
devuelve AsyncResult
. Utilice AsyncResult.get
para obtener el resultado de cada tarea.
Para hacer eso necesitas mantener referencias a las tareas.
def do_tasks(b):
tasks = []
for a in b:
tasks.append(c.delay(a))
return [t.get() for t in tasks]
O puedes usar ResultSet
:
def do_tasks(b):
rs = ResultSet([])
for a in b:
rs.add(c.delay(a))
return rs.get()