Celery任务无法执行

4

我按照安装和设置celery的指令过程进行操作,现在我正在尝试执行我的任务。我的项目目录结构如下:

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

include
lib

这是我的代码:
设置.py
CELERY_BROKER_URL = 'amqp://guest:guest@localhost:5672//' 

celery.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函数不起作用,它没有执行print语句。我想每分钟执行一次该函数。有什么问题吗?

1个回答

2
我认为在开始实验之前,您需要阅读更多内容。Celery是一个分布式任务队列,基本上意味着它轮询队列以查看是否有需要运行的任务。如果有,它就会运行任务。
关于您的设置,您似乎有一个任务运行器,但没有该运行器需要轮询以检查是否有任何任务需要运行的队列。配置`CELERY_BROKER_URL`与该队列有关。我建议您首先阅读"Celery的介绍文档",特别是"我需要什么?"部分。
注意:在弄清队列部分之后
此外,我不确定您如何运行和提供django应用程序,但celery需要单独的进程。对于这部分,您需要浏览"使用Celery的第一步"

我已经阅读了所有内容,不确定关于队列部分是否有什么需要“解决”的问题?我在django的本地服务器上运行我的应用程序,因此CELERY_BROKER_URL对我来说应该与说明中的相同。我尝试在项目根目录(即manage.py所在的位置)中运行./bin/celery -A draft1 worker -l info,但返回了以下错误:AttributeError: module 'draft1' has no attribute 'app' / 在处理以上异常时,发生了另一个异常: AttributeError: module 'draft1' has no attribute 'celery' 你知道这可能意味着什么吗?(draft1是我的应用程序名称 - Zorgan
你有设置队列服务器吗?比如RabbitMQ? - Gokhan Sari
是的,我的Django服务器和RabbitMQ都在运行。 - Zorgan
然后将用户添加到RabbitMQ。并使用CELERY_BROKER_URL ='amqp:// user:password @ host:port'将您的Django + Celery应用程序指向您的RabbitMQ代理(假设您正在本地主机上运行RabbitMQ服务器)。 - Gokhan Sari
我假设你的项目很简单,请你按照官方教程一步一步地尝试一下?我认为你可能跳过了某些步骤。http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html#using-celery-with-django - Gokhan Sari
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接