2016-07-15 12 views
-1

私は2つのセロリのタスクを持っている:2番目のタスクのグループforループの最初のタスクの戻り値を使用する方法は?

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

しかし、上記の「e」引数は戻り値である:

@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 

は、私が最初にタスク1を実行して、並行してタスク2のグループを実行したいですタスク1に割り当てられ、タスク2に渡され、forループで使用されます。 Celeryを使ってどのように実装できますか?

答えて

0

最初のタスクのベースを指定し、最初のタスクのretValで2番目のタスクを呼び出すことができます。あなたのベースのon_successメソッドでこれを行うことができます。

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 
関連する問題