Celery定期任务未在Django中运行

时间:2019-02-22 10:26:09

标签: python django celery django-celery celerybeat

文件结构

proj/proj/
         celery.py
         (and other files)
    /sitesettings/
         tasks.py
         (and other files)

celery.py

app = Celery('mooncake',broker_url = 'amqp://')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

sitesettings / tasks.py

from __future__ import absolute_import, unicode_literals
from comma.models import Post
from mooncake.celery import app

app.conf.beat_schedule = {
'every-5-seconds': {
    'task': 'sitesettings.tasks.statisticsTag',
    'schedule': 5.0,
    'args': ()
},
}

@app.task
def statisticsTag():
    print(Post.objects.all()[0])

并使用

运行它
celery -A proj beat -l info

放在一起
[2019-02-22 18:21:08,346: INFO/MainProcess] Scheduler: Sending due task every-5-seconds (sitesettings.tasks.statisticsTag)

,但没有其他输出。 我曾经尝试在proj / celery.py中编写它,但是它无法运行,因为我必须从另一个应用程序导入,它退出并显示“应用程序未加载”错误。那我该怎么办?

1 个答案:

答案 0 :(得分:2)

您调用的启动celery celery -A proj beat -l info的命令是celery的starting a beat scheduler instance,它将适当的任务发送到工作程序实例。

您还需要start a worker server来执行那些应有的任务。您可以使用命令celery -A proj worker -l info启动芹菜工作者。这将需要在调度程序运行时同时运行

或者,您可以运行工人with embedded beat scheduler celery -A proj woker -B -l info,但不建议将其用于生产。