python - 为什么我会收到 KeyError : 'scheduler' when trying to run a celery beat?

标签 python django vagrant celery celerybeat

我在 Django 中使用 celery 来定期安排任务。以下是文件:

任务.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 不起作用。

最佳答案

尝试在任务上添加路径

app.conf.beat_schedule = {

    "query": {

        "task": "query",

        "schedule": crontab(minute="*", hour="*", day_of_month='*')
    }
}

“尝试在任务上添加路径 - project_name.tasks.func_name”

关于python - 为什么我会收到 KeyError : 'scheduler' when trying to run a celery beat?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62972322/

相关文章:

python - Django_tables2 带有编辑和删除按钮。怎样做才正确呢?

django - django:将所有列作为列表获取

python - Django REST框架: Using the Accept-Language header to set an instance's "locale"

macos - Vagrant 1.7 OSX 上的 SSH 身份验证失败 – 私钥未复制到虚拟机

python - 从 spark 数据框中获取 n 行并传递给 toPandas()

python - 使用 dask 分布式并行运行 shell 命令

python - 如何在python中限制日志文件大小

python - Django 使用模型字段的验证器进行客户端验证

vagrant - 在哪里可以找到config.vm.boot_timeout?

vagrant - 无法使用条件