【发布时间】: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 后端正确通信。请参阅以下答案中链接的文档