Как использовать результат обратного вызова для сельдерея AsyncTask - PullRequest
0 голосов
/ 11 октября 2018

У меня следующая ситуация.

My client отправляет работнику следующее задание:

# client
task = my_task.apply_async((some_params), queue='my_queue')
# task.get()  # This blocks

Мой работник правильно выполняет задание и возвращает результат.

Итак, получение результата с помощью task.get() работает, но блокируется.Теперь я хотел бы иметь обратный вызов, который вызывается, когда результат (успех или неудача) доступен.

Существует функция on_success класса Task .Но это используется в работнике. Похожий вопрос

Есть идеи или решения?

1 Ответ

0 голосов
/ 12 октября 2018

У вас могут быть обратные вызовы с задачей, но не вызывающий или клиент может быть уведомлен или отозван (потому что сельдерей вне процесса), это будет другая задача сельдерея, которую нужно использовать в качествеОбратный вызов . Если вы хотите использовать обратный вызов, вы можете использовать функцию сельдерея для ссылки или агитации .

Для простого обратного вызова, использующего результат инициирующей задачи, вы можете сделать следующее:


@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())


...