2016-07-15 10 views
-1

Ich habe zwei Sellerie Aufgaben:Wie verwende ich den Rückgabewert der ersten Aufgabe in der Gruppe der zweiten Aufgabe für die Schleife?

@app.task 
def task1(a, b, c, d): 
    # do some stuff and find the return value 
    return r 

@app.task 
def task2(a, b, c, d, e, f, g): 
    # do some other stuff 

Ich mag zuerst task1 ausführen und dann eine Gruppe von task2 parallel ausführen:

c = chain(task1.s(a, b, c, d), group(task2.si(a, b, c, e, i, j) for i, j in enumerate(range(e)))) 

Aber ist das „e“ Argument über den Rückgabewert der Task1, die an task2 übergeben wird und in der for-Schleife verwendet wird. Wie könnte das mit Sellerie umgesetzt werden?

Antwort

0

Sie können eine Basis für Ihre erste Aufgabe angeben und die zweite Aufgabe mit dem retVal der ersten Aufgabe aufrufen. Sie können dies in der on_success-Methode Ihrer Basis tun.

import Task from Celery 

def setVal(): 
    return 1, 2, 3 

class FollowUp(Task): 
    def on_success(self, retval, task_id, *args, **kwargs): 

     for i, j in enumerate(range(retval)): 
      task2.si(a, b, c, retval, i, j) # a, b, c should be set before here 
     # Use a task set here if you need to collectively verify the status of your tasks 
     # http://docs.celeryproject.org/en/2.1-archived/reference/celery.task.sets.html 


@app.task(base=FollowUpTask) 
def add(*args): 
    return 3 


@app.task 
def task2(a, b, c, d, e, f, g): 
    pass