【问题标题】:Celery task will not execute芹菜任务不会执行
【发布时间】:2018-03-07 12:24:01
【问题描述】:

我已关注instruction process to installing and setting up celery,现在我正在尝试执行我的任务。我的项目树如下所示:

bin
draft1--
        |
         -------draft1 ----
                           |
                            --------celery.py
                            --------tasks.py
                            --------views.py
         -------manage.py
         -------templates

include
lib

这是我的代码:

settings.py

CELERY_BROKER_URL = 'amqp://guest:guest@localhost:5672//' 

芹菜.py

import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'app.settings')

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

tasks.py

from celery import shared_task

@shared_task
def print_this():
    print('ONE MINUTE')

app.views

print_this.delay()

所以我的 celery 函数不起作用,它不执行打印语句。我想要做的是每分钟执行一次功能。知道问题出在哪里吗?

【问题讨论】:

    标签: python django celery


    【解决方案1】:

    我认为您需要在开始实验之前阅读更多内容。 Celery 是一个分布式任务队列,这基本上意味着,它会轮询一个队列以查看是否有任何任务需要运行。如果有,它会运行任务。

    关于您的设置,您似乎有一个任务运行器,但没有运行器需要轮询以检查是否有任何任务要运行的队列。配置CELERY_BROKER_URL 是关于该队列的。我建议您从阅读"Celery's Introduction documents" 开始。尤其是"What do I need?" 部分。

    找出队列部分后的注意事项

    另外,我不确定您如何运行和服务您的 django 应用程序,但 celery 需要单独的进程。对于这部分,您需要浏览"First Steps with Celery"

    【讨论】:

    • 我已经阅读了所有内容,但不确定是否有任何关于队列部分的“弄清楚”?我在 django 的本地服务器上运行我的应用程序,所以 CELERY_BROKER_URL 对我来说应该与说明中的相同。我在我的项目根目录(manage.py 所在的位置)中尝试了./bin/celery -A draft1 worker -l info,它返回了这个错误:AttributeError: module 'draft1' has no attribute 'app'/During handling of the above exception, another exception occurred:AttributeError: module 'draft1' has no attribute 'celery' 知道这意味着什么吗? (draft1 is my app name)
    • 您是否设置了队列服务器?喜欢rabbitmq?
    • 是的,我的 django 服务器和 rabbitmq 都在运行。
    • 然后给rabbitmq添加一个用户。并使用CELERY_BROKER_URL = 'amqp://user:password@host:port' 将您的 django + celery 应用程序指向您的 rabbitmq 代理(假设您在 localhost 上运行 rabbitmq 服务器)
    • 我已将我的CELERY_BROKER_URL 更改为正确的值,并且我已在浏览器中登录到我的 RabbotMQ。你能告诉我如何执行我的功能吗?我相信我拥有所有工具,但是我的功能不起作用。我所有的代码都在我的帖子中。