2016-03-04 34 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