如何在任务中获取芹菜结果模型(使用 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)的主要内容,如果未能解决你的问题,请参考以下文章