Правильный способ реализации потока управления внутри задач Celery - PullRequest
0 голосов
/ 26 мая 2020

Версия сельдерея: 4.4.2.

Мои примеры задач:

@app.task()
def one():
    return 'Hi'

@app.task()
def two():
    return 'My name is: '

@app.task()
def if_one():
    # ...do something
    return 'John'

@app.task()
def if_two():
    # ...do something
    return 'Jane'

@app.task()
def three():
    if man:
        result = if_one.apply_async()
        # ...do something with the result...
    else:
        result = if_two.apply_async()
        # ...do something with the result...

@app.task()
def run_flow():
    result = chain(one.s() | two.s() | three.s())

Я бы хотел получить результат if_one() или if_two() внутри three(). Однако я знаю, что ожидание результата задачи внутри другой задачи может привести к тупиковой ситуации, и, очевидно, это неправильный способ сделать это, поэтому я не могу сделать что-то вроде result.get() - Celery также выдает ошибку, когда у вас есть .get() внутри задача.

Мой реальный поток более сложный. У меня есть примерно 15 связанных задач, и, например, по результату шестой задачи мне нужно выполнить некоторые другие задачи. Я уже думал о двух разных цепочках, но это все еще предполагает наличие оператора if ...

Каков правильный способ получить результат одной задачи внутри другой? Или, как "Celery-i sh" создать logi c выше?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...