如何使用 Celery AsyncTask 的结果回调函数

5

我有以下情况。

我的客户端向工作者发送以下任务:

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

我的工作人员正确执行任务并返回结果。
因此,使用 task.get() 检索结果是有效的,但会阻塞。现在我想要的是一个回调函数,当结果(成功或失败)可用时调用。 Task 类有一个 on_success 函数。 但那是在工作者中使用的。类似问题 有什么想法或解决方案吗?

回调函数是否使用结果?也许链式调用会很适合这种情况。http://docs.celeryproject.org/en/latest/userguide/canvas.html - sytech
@sytech 是的,它确实有。但这重要吗?我可以使用 task.get() 来检索结果,对吧? - dab0bby
1个回答

5
你可以在任务中使用回调函数,但是调用方或客户端无法被通知或回调(因为celery是一个进程外的工具),必须使用另一个celery任务作为回调函数如果想要使用回调函数,可以使用celery的链接或画布功能

对于一个使用启动任务结果的简单回调函数,可以按照以下步骤进行操作:


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



网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接