Версия сельдерея: 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 выше?