如何对芹菜AsyncTask使用结果回调

时间:2018-10-11 16:00:14

标签: python rabbitmq celery

我有以下情况。

我的client向工作人员发送以下任务:

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

我的工作人员正确执行了任务并返回了结果。

因此使用task.get()检索结果是可行的,但是会阻塞。现在,我想要的是当结果(成功或失败)可用时调用的回调。

Task类有一个on_success函数。但这是在工人中使用的。 Similiar Question

有什么想法或解决方案吗?

1 个答案:

答案 0 :(得分:0)

您可以使用一个任务进行回调,但是通知或回叫的不是呼叫者或客户端(因为celery不在处理中),这将是另一个celery任务,必须用作回调If you would like to use a callback, you can use celery's link or canvassing functionality

对于使用初始化任务结果的简单回调,您可以执行以下操作:


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