Celery 文档建议让任务等待其他任务的结果是一个坏主意……但是建议的解决方案(参见“好”标题)留下了一些不足之处。具体来说,没有明确的方法可以将子任务的结果返回给调用者(而且,这有点难看)。
那么,有没有办法“链接”作业,让调用者得到最终作业的结果?例如,使用add
示例:
>>> add3 = add.subtask(args=(3, ))
>>> add.delay(1, 2, callback=add3).get()
6
或者,是否可以返回 Result 的实例?例如:
@task
def add(x, y, callback=None):
result = x + y
if callback:
return subtask(callback).delay(result)
return result
这将使链中“最终”作业的结果可以通过简单的方式检索:
result = add(1, 2, callback=add3).delay()
while isinstance(result, Result):
result = result.get()
print "result:", result