Документация Celery предполагает, что не стоит заставлять задачи ждать результатов других задач ... Но предлагаемое решение (см. «Хороший» заголовок) оставляет желать лучшего. желанный. В частности, нет четкого способа вернуть результат подзадачи обратно вызывающей стороне (к тому же это некрасиво).
Итак, есть ли какой-либо способ «связать» задания, чтобы вызывающая сторона получала результат окончательной работы? Например, чтобы использовать пример добавить
:
>>> 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