python - 如何将任务结果从 Celery 客户端代码存储到数据库?
问题描述
我正在尝试掌握 Celery 的窍门。到目前为止,一切看起来都很好。我只是无法弄清楚一件事:
我希望存储在数据库中的任务结果不仅可以从工作人员更新状态,还可以在将消息发送到代理时从客户端应用程序更新状态。
所以目前我的配置中有以下两行:
CELERY_RESULT_BACKEND = 'django-db'
CELERY_TASK_TRACK_STARTED = True
这会更新数据库中由工作人员管理的任务的所有状态,包括STARTED
状态。
但我想要的是也有由于客户端的状态,比如PENDING
. 因此,PENDING
只要工作人员没有获得该任务,DB 中的结果就会开始,然后当工作人员开始/获得该任务时,诸如 等状态STARTED
将SUCCESS
更新到数据库。
背后的基本原理是我们希望我们的数据库包含所有任务的记录,即使它们仍处于待处理状态(即尚未被任何工作人员选中)。
我的问题是:
可能吗?因为这种方式数据库中的任务行必须由客户端代码创建,然后工作人员在更新任务状态时必须识别正确的任务。如果不是通过任何 Celery 配置,那么可能是通过编写自定义代码?
我遇到了
CELERY_SEND_TASK_SENT_EVENT = True
它使 Celery 客户端能够发送事件,从而允许Flower
显示PENDING
任务。我的猜测是,如果Flower
可以从客户端代码中获取这些事件,然后从工作人员的事件中更新正确的状态,那么数据库应该能够做到。尝试上述设置只是试一试。但它不仅对数据库不起作用,而且对数据库也没有影响Flower
。我仍然看不到我的待处理任务Flower
。我只能在工人开始并改变他们的状态时看到他们。
解决方案
推荐阅读
- build - 添加自定义源文件后,在 Segger Embedded Studio 上构建失败,没有说明原因
- vba - VBA Selenium - 等待 iframe 加载
- c++ - 将十六进制值写入文本文件,显示为二进制
- c++ - 任何人都可以澄清一下:在 C++ 中的线程之间是否可靠稳定时钟
- haskell - Haskell - 将返回函子的函数应用到函子上
- html - 当使用 GET 方法时,数据进入控制台而不是 HTML
- python - 如何从调用我的 .py 脚本的文件夹中导入文件?
- domain-driven-design - 客户端在 DDD 的存储库模式中是什么意思?
- laravel - 拉拉维尔。如何将参数传递给 Laravel 中的 redirectTo() 函数
- node.js - 如何通过反应在nodejs中路由?