![](/img/trans.png)
[英]How to get celery results model (using django-celery-results) within task
[英]Is it possible to query state of a celery tasks using django-celery-results during the execution of a task?
我正在使用Celery + RabbitMQ在我的Django App中排队任务,
我想使用task_id和task_state跟踪任务的状态。
为此,我创建了一个TaskModel(Model)来将task_id,task_state和一些其他数据存储在数据库中。 在任务执行时,随着任务的进行,将保存并更新新的TaskModel对象。 一切都很好。
但是,我仍然需要添加许多功能和特性以及错误保护等。当我记得芹菜文档提到django-celery-results时。
所以我按照django-celery-results文档说明进行操作。 任务结果存储在专用表中的默认django数据库中, 但仅在任务结束后...而不是在PENDING,STARTED状态期间。
是否可以使用django-celery-results在PENDING和STARTED状态期间存储和查询任务? 或不?
谢谢
在查看了django-celery-result的源代码后,结果证明代码非常简单直接。
为了在调用任务函数后使用django-celery-result存储任务,请使用以下命令:
from django_celery_results.models import TaskResult
import json
@shared_task(bind=True)
def foo(self, count):
print('hello')
task_result = TaskResult.objects.get(self.request.id)
counter = 1
interval = 20 #Limit updates to reduce database queries
interval_count = count/interval
for i in range(count):
print(i)
if counter>= interval_count:
interval_count+=count/interval
task_result.meta = json.dumps({'progress': counter/count})
task_result.save()
counter+=1
task_result.save()
return
def goo()
task = foo.delay(1000)
task_result = TaskResult(task_id=task.task_id)
task_result.save()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.