Python 如何将芹菜客户端代码中的任务结果存储到DB中?
我正试着动手学芹菜。到目前为止,一切看起来都很好。我只是想不出一件事: 我希望在将消息发送到代理时,存储在DB中的任务结果的状态不仅从worker更新,也从客户机应用程序更新 因此,目前我的配置中有以下两行:Python 如何将芹菜客户端代码中的任务结果存储到DB中?,python,django,rabbitmq,celery,flower,Python,Django,Rabbitmq,Celery,Flower,我正试着动手学芹菜。到目前为止,一切看起来都很好。我只是想不出一件事: 我希望在将消息发送到代理时,存储在DB中的任务结果的状态不仅从worker更新,也从客户机应用程序更新 因此,目前我的配置中有以下两行: CELERY_RESULT_BACKEND = 'django-db' CELERY_TASK_TRACK_STARTED = True 这将更新数据库中由工作人员管理的任务的所有状态,包括已启动状态 但我想要的是也有客户端的状态,比如PENDING。因此,只要工作人员没有获得该任务,数
CELERY_RESULT_BACKEND = 'django-db'
CELERY_TASK_TRACK_STARTED = True
这将更新数据库中由工作人员管理的任务的所有状态,包括已启动
状态
但我想要的是也有客户端的状态,比如PENDING
。因此,只要工作人员没有获得该任务,数据库中的结果就以挂起的开始,然后当工作人员开始/获得该任务时,像启动的,成功的等状态更新到数据库中
背后的基本原理是,我们希望我们的数据库拥有所有任务的记录,即使它们仍处于挂起状态(即尚未被任何工作人员选中)
我的问题是:
可能吗?因为这样,数据库中的任务行必须由客户机代码创建,然后工人在更新任务状态时必须识别正确的任务。如果不是通过任何芹菜配置,那么是通过编写自定义代码
我遇到了CELERY\u SEND\u TASK\u SEND\u EVENT=True
,它使芹菜客户端能够发送事件,从而允许Flower
显示挂起的任务。我的猜测是,如果Flower
可以从客户机代码中获取这些事件,然后从worker的事件中更新正确的状态,那么数据库也应该能够做到这一点。尝试了以上设置,只是给它一个尝试。但它不仅对数据库不起作用,而且对Flower
也没有影响。我仍然没有在Flower
上看到挂起的任务。我只能在工作进程启动并更改其状态时才能看到它们
请注意,“挂起”可能不是您所想的意思,参见文档:“任务状态未知(假设挂起,因为您知道id)。”-事实上,如果您将一个虚假的任务id传递给AsyncResult
,您将得到此结果。(注意:是的,我知道它没有回答你的问题,只是想警告你)。wrt/Flower,你可能想阅读源代码,IIRC它直接从代理队列中获取任务列表,而不是从结果后端读取。是的,你已经读过了挂起
的实际含义。但问题依然存在。如果我理解正确,弗劳尔不会/不能?从代理的队列中获取数据。它捕获工作人员发送的事件(以及客户端根据芹菜发送任务发送事件的文档发送的事件,这些显然对我不起作用)