如何在Django视图中导入芹菜任务

问题描述

我正在用Django学习芹菜。我正在尝试使用django和celery创建一个简单的加法项目。我用Django创建了一个简单的webapp。在index.html模板中,我有一个带有2个输入字段的表单。第一个输入字段采用x value(要添加的第一个数字)。第二个输入字段使用y value(第二个要加的数字)。提交表单后,我希望运行celery任务。 django项目名称 核心 ,应用名称 mainapp

芹菜任务如下

mainapp / tasks.py

from celery import Celery
from celery.schedules import crontab
from celery import shared_task

@shared_task
def add_num(x,y):
    return x+y

core / celery.py

from __future__ import absolute_import,unicode_literals
import os
from celery import Celery

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

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

mainapp / views.py

from django.shortcuts import render
from . import tasks

# Create your views here.
def index(request):
    if request.method == 'POST':
        x = request.POST['x']
        y = request.POST['y']

        print(x,y)

        add_num.delay(x,y)

        return render(request,'index.html')

    return render(request,'index.html')

我使用以下命令在后台运行Rabbitmq

brew services start rabbitmq

celery使用以下命令在单独的终端窗口中运行

celery -A core worker -B -l INFO

提交表单时,出现以下错误

NameError: name 'add_num' is not defined

我想我没有将任务正确导入到views.py中。

解决方法

导入不正确

在行下更改

from . import tasks

from .tasks import add_num