Ous*_*uss 10 python django django-celery
我正在使用 Celery + RabbitMQ 在我的 Django 应用程序中排队任务,
我想使用 task_id 和 task_state 跟踪任务的状态。
为此,我创建了一个 TaskModel(Model) 来存储数据库中的 task_id、task_state 和一些附加数据。在任务执行时,一个新的 TaskModel 对象会随着任务的进行而保存和更新。一切正常。
但是,我仍然需要添加很多功能和特性以及错误保护等。那时我记得 celery 文档提到了 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()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3728 次 |
最近记录: |