我在Django中使用celery来定期调度任务。以下是文件:
tasks.py
@periodic_task(run_every=timedelta(minutes=1))
def query():
...
celery.py
from __future__ import absolute_import, unicode_literals
from os import environ, path
from celery import Celery
from django.conf import settings
PROJECT_NAME = path.basename(path.dirname(__file__))
environ.setdefault('DJANGO_SETTINGS_MODULE', '%s.settings' % PROJECT_NAME)
app = Celery(PROJECT_NAME)
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
当我运行时
celery -A project worker
启动工作线程时,执行正常。但是,当我运行
celery -A project beat
开始启动节拍调度器时,我收到以下错误:
KeyError: 'scheduler'
这种情况为什么会发生?我正在PyCharm中使用Vagrant,并通过vagrant ssh访问服务器。
更新:
如果我运行
celery -A project worker --beat --scheduler django --loglevel=info
我没有看到错误提示,但工作人员并没有收到任何任务。因此,似乎由于某种原因,任务没有被接收。
此外,加入...
app.conf.beat_schedule = {
"query": {
"task": "query",
"schedule": crontab(minute="*", hour="*", day_of_month='*')
}
}
修改 celery.py 并添加
@app.task(name="query")
tasks.py无法工作。