Python 如何将芹菜客户端代码中的任务结果存储到DB中?

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。因此,只要工作人员没有获得该任务,数

我正试着动手学芹菜。到目前为止,一切看起来都很好。我只是想不出一件事:

我希望在将消息发送到代理时,存储在DB中的任务结果的状态不仅从worker更新,也从客户机应用程序更新

因此,目前我的配置中有以下两行:

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它直接从代理队列中获取任务列表,而不是从结果后端读取。是的,你已经读过了
    挂起
    的实际含义。但问题依然存在。如果我理解正确,弗劳尔不会/不能?从代理的队列中获取数据。它捕获工作人员发送的事件(以及客户端根据
    芹菜发送任务发送事件的文档发送的事件,这些显然对我不起作用)