django芹菜 - 任务通过django管理员

时间:2014-10-15 10:51:29

标签: python django celery django-celery

我正在尝试用django设置芹菜。

所有设置都已设置,如果我手动启动任务,它就可以正常工作。 (所有发生在我的本地开发服务器上)

mytask.apply_async()

然后我尝试在admin中设置一些任务。我将mytask设置为每5分钟运行一次以进行测试。

但是5分钟后,什么也没发生。为了让这件事有用,应该做些什么呢?

1 个答案:

答案 0 :(得分:0)

我知道有点晚了。但是为了回答你的问题。

需要通过pip安装Django-celery-beat以运行定期任务。安装后,进行迁移和迁移。

settings.py

from __future__ import absolute_import
import os
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'djcelery',
    'django_celery_beat',
    'taskname'
]

import djcelery
djcelery.setup_loader()
CELERYBEAT_SCHEDULER='djcelery.schedulers.DatabaseScheduler'
#BROKER_URL = 'django://'
BROKER_URL = 'amqp://myuser:mypassword@localhost:5672/myvhost'
from celery.schedules import crontab
CELERY_BEAT_SCHEDULE = {
    'add': {
       'task': 'proj.taskfilename.taskname',
       'schedule': crontab(minute=0, hour='*'),
       'args': (5,5)
    }
}

这使得任务每1小时运行一次。

要自动运行任务,我们需要在单独的终端中运行Worker和beat。在manage.py的项目位置打开两个终端,并在一个终端中运行每个命令。

celery -A proj worker -l info
celery -A proj beat -l info

worker继续等待队列中的下一个任务。 beat将周期性任务发送到队列。工作者异步运行它们。

或者您可以从一个终端运行它:

celery -A proj worker -B -l info

希望这会有所帮助。