芹菜+ django - 如何将任务状态写入数据库 [英] celery + django - how to write task state to database

查看:611
本文介绍了芹菜+ django - 如何将任务状态写入数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Django和RabbitMQ运行Celery,并希望看到数据库表中的任务状态。不幸的是没有条目写入表djcelery_taskstate,我无法弄清楚为什么。



我的设置:

  CELERY_ENABLE_UTC = True 
BROKER_URL =amqp:// guest:guest @ localhost:5672 /
CELERY_RESULT_BACKEND =database
CELERYBEAT_SCHEDULER ='djcelery .schedulers.DatabaseScheduler'

CELERY_TRACK_STARTED = True
CELERY_SEND_EVENTS = True

CELERY_IMPORTS =(project_management.tasks,accounting.tasks,time_tracking.tasks $)
CELERY_ALWAYS_EAGER = False

import djcelery
djcelery.setup_loader()

我的任务:

  class TestTask(Task):

def run(self,po_id):
self.update_state(state = states.STARTED,meta = {'total':0,'done':False})
#do something ..
self.update_state(state = states.SUCCESS,meta = {'total':100,'done':True})

我是在以下视图中启动任务:

  TestTask.apply_async(args = [],kwargs = {})

我正在开始芹菜工人如下。

  python manage.py celeryd -v 1 -B -s celery -E -l INFO 

控制台提供以下输出:

  [2013-05-19 11:10:03,774:INFO / MainProcess]任务accounting.tasks.TestTask [5463b2ed-0eba-451d-b828-7a89fcd36348]成功在0.0538640022278s:无

任何想法我的设置有什么问题?

解决方案>

您需要启动快照相机,以便在数据库中查看结果。

  python manage.py celerycam 

一旦你运行,你将可以看到 djcelery 表中的条目。


I'm running Celery with Django and RabbitMQ and want to see the task states in the database table. Unfortunately no entries are written into the table djcelery_taskstate and I can't figure out why.

My settings:

CELERY_ENABLE_UTC = True
BROKER_URL = "amqp://guest:guest@localhost:5672/"
CELERY_RESULT_BACKEND = "database"
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'

CELERY_TRACK_STARTED = True
CELERY_SEND_EVENTS = True

CELERY_IMPORTS = ("project_management.tasks", "accounting.tasks", "time_tracking.tasks", )
CELERY_ALWAYS_EAGER = False

import djcelery
djcelery.setup_loader()

My Task:

class TestTask(Task):

    def run(self, po_id):
        self.update_state(state=states.STARTED, meta={'total': 0, 'done': False})
        #do something..
        self.update_state(state=states.SUCCESS, meta={'total': 100, 'done': True})

I'm starting the task as follows in a view:

TestTask.apply_async(args=[], kwargs={})

I'm starting celery workers as follows.

python manage.py celeryd -v 1 -B -s celery -E -l INFO

Console gives me the following output:

[2013-05-19 11:10:03,774: INFO/MainProcess] Task accounting.tasks.TestTask[5463b2ed-0eba-451d-b828-7a89fcd36348] succeeded in 0.0538640022278s: None

Any idea what is wrong with my setup?

解决方案

You need to start up the snapshot camera as well in order to see the results in the database.

python manage.py celerycam

Once you have that running, you will be able to see entries in the djcelery tables.

这篇关于芹菜+ django - 如何将任务状态写入数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆