我有以下情况。 我的客户端向工作者发送以下任务: # client task = my_task.apply_async((some_params), queue='my_queue') # task.get() # This blocks 我的工作人员正确执行任务并返回结果。因此,使用 task.get() 检索结果是有效的,但会阻塞。现在我想要的是一个回调函数,当结果(成功或失败)可用时调用。 Task 类有一个 on_success 函数。 但那是在工作者中使用的。类似问题 有什么想法或解决方案吗?
你可以在任务中使用回调函数,但是调用方或客户端无法被通知或回调(因为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())
task.get()
来检索结果,对吧? - dab0bby