我正在尝试用django设置芹菜。
所有设置都已设置,如果我手动启动任务,它就可以正常工作。 (所有发生在我的本地开发服务器上)
mytask.apply_async()
然后我尝试在admin中设置一些任务。我将mytask设置为每5分钟运行一次以进行测试。
但是5分钟后,什么也没发生。为了让这件事有用,应该做些什么呢?
答案 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
希望这会有所帮助。