【问题标题】:Celery not carrying out a scheduled, repeating, task芹菜没有执行预定的、重复的任务
【发布时间】:2016-08-08 16:25:54
【问题描述】:

我正在使用 Django 设置监控股票价格的网络服务器。因此,我希望每 5 秒执行一次任务(更新价格),并通过控制台日志告诉我有关更新的信息。为什么 Celery 不按要求写入控制台?

我的文件结构:

├── Project
│   ├── celery.py
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
├── Application
│   ├── admin.py
│   ├── __init__.py
│   ├── migrations
│   ├── models.py
│   ├── serializers.py
│   |── tasks.py
│   |── tests.py
│   |── views.py

settings.py 中我的 Celery 设置:

# Celery
CELERY_RESULT_BACKEND = 'djcelery.backends.database:DatabaseBackend'
CELERY_TASK_RESULT_EXPIRES = 3600

# Celery repeating tasks
CELERYBEAT_SCHEDULE = {
    'notify-every-10-seconds': {
         'task': 'Main.tasks.update',
         'schedule': timedelta(seconds=10),
    },
}

还有任务本身:

from __future__ import absolute_import

from celery import shared_task
from .models import NasdaqShare


@shared_task
def update():
    print('Updated!')

当使用 Django 数据库运行 celery worker 网络时,它似乎甚至将 Application.tasks.update 列为要运行的任务。

为什么我没有看到任何东西被打印到控制台?

如果您想了解更多信息,请告诉我。

【问题讨论】:

  • Celery 写入您运行它的控制台,而不是您发送消息的控制台/标准输出。您如何在生产中运行 celery?作为使用 celeryd 的自己的守护进程,与主管,... 您将在相关的日志文件中找到输出。如果您可以提供有关您的设置的更多信息。您可能还需要设置适当的日志级别并运行 celery -l info。
  • 您是否在节拍模式下运行 celery 实例?否则,那些计划任务将永远不会被执行。
  • Falk,我正在 IDE 中的终端上运行 Celery,它会显示横幅和信息集合。消息会出现在同一个终端吗?
  • 卢克,我不知道我是否在节拍模式下运行,我正在使用命令'celery -A Project worker -l info'。对吗?
  • 对于计划任务,您需要 celery beat 和 RabbitMQ 等消息队列,并确保它们彼此之间以及与 celery 后端正确通信。请参阅以下答案中链接的文档

标签: python django celery


【解决方案1】:

确保您运行 celery beat scheduler,例如celery -A Project beat

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 2017-04-11
    • 2019-08-01
    • 2021-12-16
    • 2018-03-07
    • 1970-01-01
    • 2015-01-20
    相关资源
    最近更新 更多