如何使用 celery AsyncTask 的结果回调

问题描述 投票:0回答:1

我有以下情况。

我的

client
向工人发送以下任务:

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

我的worker正确执行任务并返回结果。

因此使用

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

Task
类有一个on_success函数。但这是用在工人身上的。 类似问题

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

python callback rabbitmq celery
1个回答
6
投票

您可以对任务进行回调,但不能通知或回调调用者或客户端(因为 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())


© www.soinside.com 2019 - 2024. All rights reserved.