我的架构:
主机:
RabbitMQ 3.6.5(经纪人)
Redis(后端)
花
芹菜默认工作者
网络服务器应用程序
从动MACHINE1:
芹菜默认工作者
从属机2:
芹菜默认工作者
我通过Webserver应用程序(从主机)触发任务,例如:
task_id = task1.delay(1,2,3).id
。
我有一个用于检索任务状态/结果的API(同样,来自主机):
result = task1.AsyncResult(task_id, app=celery_app)
if result.ready():
return result.get()
return result.state
其中celery_app
的定义与在工作人员中完全相同..(经纪人,后端......)
问题:当主机的默认工作人员使用时,可以检索任务的状态/结果,但是当奴隶机工人消耗时我不能似乎检索到正确的状态/结果:( result.state
== PENDING
永远)。
从主机上的Flower我可以检索到正确的状态/结果(SUCCESS
+实际结果)。
此外,结果显示在Redis后端SUCCESS
:
redis-cli -h master-machine -p 6379
127.0.0.1:6379> get "celery-task-meta-74de04de-0d4e-45bc-977d-16caab047eed"
"{\"status\": \"SUCCESS\", \"traceback\": null, \"result\": {123}, \"task_id\": \"74de04de-0d4e-45bc-977d-16caab047eed\", \"children\": []}"
知道为什么会这样吗?我希望能够检索任务'状态/结果,包括在从机上运行的任务。