celery + django - 如何将任务状态写入数据库

时间:2013-05-19 09:16:50

标签: django celery

我正在使用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] Task accounting.tasks.TestTask[5463b2ed-0eba-451d-b828-7a89fcd36348] succeeded in 0.0538640022278s: None

知道我的设置有什么问题吗?

1 个答案:

答案 0 :(得分:2)

您还需要启动snapshot camera才能在数据库中查看结果。

python manage.py celerycam

运行后,您将能够看到djcelery表中的条目。