我有以下情况。
我的client
向工作人员发送以下任务:
# client
task = my_task.apply_async((some_params), queue='my_queue')
# task.get() # This blocks
我的工作人员正确执行了任务并返回了结果。
因此使用task.get()
检索结果是可行的,但是会阻塞。现在,我想要的是当结果(成功或失败)可用时调用的回调。
Task类有一个on_success
函数。但这是在工人中使用的。 Similiar Question
有什么想法或解决方案吗?
答案 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())