2016-03-04 59 views
1

我需要芹菜異步調用子任務對另一個人(另一臺機器上)這樣的:Asynchonous子任務

#db.py 
@task() 
def query(x,y): 
    ...something 
    return z 

#worker2.py 
@task() 
def main(x,y): 
    result=db.query.async((x,y), queue='db') 
    try: 
     a=result.get(timeout=5) 
    except celery.exceptions.TimeoutError: 
     .... 

但是從工人,當我得到警告: RuntimeWarning:一定不要調用result.get ()在一個任務!

如何從另一個任務調用異步任務?我wont'n使用鏈,和絃等

+1

正確的做法是用鏈條。你爲什麼不能使用它? – nstoitsev

+0

我嘗試鏈現在: res = chain(db.query.s(x,y))() print(res.get()) 我得到**從不在任務中調用result.get()! **再次:( –

回答

0

,就算你想阻止一個任務等待另一個,所以正確的做法是用chain

db.py 
@task() 
def query(x, y): 
    ...something 
    return z 

#worker2.py 
@task() 
def main(resultFromQuery, x, y): 
    a = resultFromQuery.get(timeout=5) 
    ... 

res = chain(query.s(x,y), main.s(x,y)); 
res.get() 
+0

但我需要從另一個任務調用子任務,而不是從主程序 這是系統,我不kwow開始的確切工作流:( –

+0

然後不要調用'result.get() ' - 你需要第二項任務的結果嗎? – scytale