如何在任务中获取芹菜结果模型(使用 django-celery-results)

Posted

技术标签:

【中文标题】如何在任务中获取芹菜结果模型(使用 django-celery-results)【英文标题】:How to get celery results model (using django-celery-results) within task 【发布时间】:2019-09-25 19:00:02 【问题描述】:

我计划使用django-celery-results 后端来跟踪 Celery 任务的状态和结果。

django-celery-results 后端是否适合在任务运行时存储任务状态,还是仅在任务完成后存储?

尚不清楚TaskResult 模型何时首次创建(在任务创建、任务执行或完成时?)

如果它是在任务创建时创建的,如果设置了task_track_started选项,当任务被拾取时模型状态是否会自动更新为RUNNING?

可以在任务函数中访问TaskResult 实例吗?

另一个问题here 似乎表明了这一点,但没有提到任务状态更新为 RUNNING

【问题讨论】:

【参考方案1】:

关于Taskresult,当然可以在task执行期间访问,只需要import即可:

from django-celery-results.models import TaskResult

有了这个你可以通过task_id、task_name等访问模型taskresult过滤器, 这是官方代码,可以通过https://github.com/celery/django-celery-results/blob/master/django_celery_results/models.pyhttps://github.com/celery/django-celery-results/blob/master/django_celery_results/models.py

例子:

task = TaskResult.objects.filter(task_name=task_name, status='SUCCESS').first()

此外,您可以在模型字段中为您的任务添加一些额外的数据必需品。当任务创建并执行时,也可以修改字段,但如果状态为“成功”,您只能读取它,状态任务默认自动保存。

例子:

task_result.meta = json.dumps('help_text': 'date': '2020-11-30')

我推荐使用is_dict()函数,在这里你可以查看模型属性。

【讨论】:

【参考方案2】:

后端在设置模块中配置为:

CELERY_RESULT_BACKEND = 'django-db' # in this case it is django DB

如果您将 django DB 配置为后端,那么您可以将其导入为

from django-celery-results.models import TaskResult

【讨论】:

这并没有解释我所追求的TaskResult实例创建和生命周期信息

以上是关于如何在任务中获取芹菜结果模型(使用 django-celery-results)的主要内容,如果未能解决你的问题,请参考以下文章

芹菜 - 无法获取任务结果

如何记录 Django 芹菜任务中发生的异常

芹菜任务不会在 django 中执行

如何在django中复制数据,我该如何避免?

芹菜任务未显示在 Django Admin 中

芹菜:访问上次运行任务的时间?