芹菜定期任务未在 Django 中运行

Tac*_*Tac 2 python django celery django-celery celerybeat

文件结构

proj/proj/
         celery.py
         (and other files)
    /sitesettings/
         tasks.py
         (and other files)
Run Code Online (Sandbox Code Playgroud)

芹菜.py

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

站点设置/任务.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])
Run Code Online (Sandbox Code Playgroud)

并运行它

celery -A proj beat -l info
Run Code Online (Sandbox Code Playgroud)

把它拿出来

[2019-02-22 18:21:08,346: INFO/MainProcess] Scheduler: Sending due task every-5-seconds (sitesettings.tasks.statisticsTag)
Run Code Online (Sandbox Code Playgroud)

但没有进一步的输出。我曾经尝试在 proj/celery.py 中编写它,但它无法运行,因为我必须从另一个应用程序导入,它以“应用程序未加载”错误退出。所以我该怎么做?

grr*_*rrr 11

您呼叫开始芹菜命令celery -A proj beat -l info开始拍调度例如芹菜,它发送到期的任务的工人实例。

您还需要启动一个工作服务器来执行这些应有的任务。您可以使用命令启动 celery worker celery -A proj worker -l info。这需要您的调度程序运行的同时运行。

或者,您可以运行带有嵌入式节拍调度程序 的工作程序,celery -A proj worker -B -l info但不建议将其用于生产用途。

  • 谢谢你!!Celery 5 的文档“令人震惊地不清楚”,您现在需要运行两个 celery 实例才能使计划任务正常工作。 (2认同)