Python + Celery: объединение заданий в цепочку?

Документация 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

32
задан David Wolever 22 December 2016 в 21:19
поделиться