我正在使用django,celery和rabbitmq处理任务,我们称之为APP1。在另一个主机我有APP2,需要从APP1中处理的任务中获得结果。
两个APP /主机都可以访问rabbitmq,我的第一个方法是简单地尝试从两个APP共享一个队列而没有成功。
实现这一目标的最佳方法是什么?
答案 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')