繁体   English   中英

是否可以在执行任务期间使用django-celery-results查询芹菜任务的状态?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM