У меня есть следующая ситуация.
Мой client
отправляет работнику следующую задачу:
# client
task = my_task.apply_async((some_params), queue='my_queue')
# task.get() # This blocks
Мой рабочий выполняет задачу должным образом и возвращает результат.
Таким образом, task.get()
результата с помощью task.get()
работает, но он блокирует. Теперь то, что я хотел бы иметь, - это обратный вызов, который вызывается, когда доступен результат (успех или неудача).
Существует функция on_success
класса Task. Но это используется в работнике. Совлокальный вопрос
Любые идеи или решения?
Вы можете иметь обратные вызовы с заданием, но это не вызывающий или клиент, который может быть уведомлен или вызван (поскольку сельдерей не работает), это будет другая задача сельдерея, которая должна использоваться в качестве обратного вызова. Если вы хотите использовать обратный вызов, вы можете использовать ссылку на сельдерей или агитацию.
Для простого обратного вызова, использующего результат инициирующей задачи, вы можете сделать следующее:
@app.task
def add(m, n):
return m + n
@app.task
def callback(result):
print(f'My result was {result}')
def client_caller():
add.apply_async(args=(2, 2), link=callback.s())
task.get()
чтобы получить результат правильно?