【发布时间】:2019-06-15 01:12:21
【问题描述】:
我有一个使用 Celery 创建异步任务的 Django 应用程序。其中一些任务存在于 Django 项目中,而另一些则存在于具有自己的代码库的远程工作人员中。
我目前使用django-celery-results 包将任务调用的结果存储在 Django 数据库中,以便我可以使用 Django ORM 轻松查询调用的状态。这在我调用“本地”任务时效果很好,但在我调用远程任务时似乎效果不佳。
例如:
app.send_task("django.foo") # Return status SUCCESS and store result in DB
app.send_task("remote.bar") # Stuck in PENDING and never create result in DB
通过阅读Celery Docs,我发现如果客户端和工作人员不使用相同的CELERY_RESULT_BACKEND 设置,任务可能会卡在PENDING 中。在这种情况下,我不能在远程工作人员上使用 django-db 后端,因为它不是 Django 应用程序。
那么在这种情况下......当以这种方式进行远程调用时,我如何存储我的结果?
注意,在remote.bar的情况下,我确认远程工作人员收到消息并执行方法。只是我的客户端(Django App)没有收到响应。
【问题讨论】:
-
使用 Django 后台任务而不是 Celery,因为它很容易在这里查看我的答案:stackoverflow.com/questions/54225303/…
-
所以你不想使用数据库作为结果后端。你还有很多其他的选择,你可以使用 redis:docs.celeryproject.org/en/latest/userguide/…
标签: python django rabbitmq celery