如何从另一个主机中的另一个应用程序获取celery任务的结果

时间:2014-10-14 16:19:15

标签: django rabbitmq celery

我正在使用django,celery和rabbitmq处理任务,我们称之为APP1。在另一个主机我有APP2,需要从APP1中处理的任务中获得结果。

两个APP /主机都可以访问rabbitmq,我的第一个方法是简单地尝试从两个APP共享一个队列而没有成功。

实现这一目标的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

一种可能的方法是让任务在APP1上运行,当处理任务完成后,将另一项任务发布到芹菜上。调用此新任务ProcessResults。此任务的数据将是原始任务的结果。这项新任务的工作人员将位于APP2上。

答案 1 :(得分:0)

只需使用您在APP1中使用的相同结果后端,例如APP2

from celery import Celery
from celery.result import AsyncResult

# set the backend URL that APP1 is using
app = Celery(backend='backend_url')

# The task ID that was queued in APP1
task = AsyncResult('task_id')

# get the task result
task.result

您需要存储来自APP1的任务ID才能在APP2中获取结果,或者如果可以帮助而不使用自定义任务ID,则需要使用自定义任务ID,但您需要使用Task.apply_async()设置自定义ID:

task.apply_async(args, kwargs, task_id='custom_id')
相关问题