我正在尝试将芹菜添加到我的django项目中。
当我从 manage.py shell 运行它时一切正常,我的 celery worker 返回 add(( 函数的结果。
当我从我的视图中调用此函数时,它会在 Celery/base 上引发一个未注册的错误和一个模块对象不可调用的错误.py第 1253 行
celery/app/base.py", line 1253, in loaderreturn get_loader_cls(self.loader_cls)(app=self)
TypeError: 'module' object is not callable
raise self.NotRegistered(key)
celery.exceptions.NotRegistered: 'home.tasks.add'
两者都来自 Apache 错误日志
我的 home.tasks.py 看起来像这样
from celery import shared_task
from celery.schedules import crontab
from django.db import connection
from django.utils import timezone, translation
#import pandas as pd
from home.models import *
from residence_management.models import *
from sqlalchemy import *
from django.conf import settings
from django.contrib.auth.models import User
from decimal import Decimal
@shared_task
def add(x, y):
return x + y
我调用任务的视图有导入:从主页.任务导入添加
在视图本身中,我只是调用add(9,5(,它失败并出现上述错误(没有@shared_task装饰器,它可以正常工作(。
在 shell 中调用函数时,即使使用 @shared_task 装饰器也能正常工作, 我也可以毫无问题地启动芹菜工人。
[2020-05-13 08:47:23,862: INFO/MainProcess] Received task: home.tasks.add[f7e50f7d-4e3d-4372-bf3e-e1c7175c7a2a]
[2020-05-13 08:47:23,879: INFO/ForkPoolWorker-8] Task home.tasks.add[f7e50f7d-4e3d-4372-bf3e-e1c7175c7a2a] succeeded in 0.015277621999999713s: 14
有什么想法可能出在哪里吗? 我将 Redis 用于代理和结果后端
您可以在 github https://github.com/celery/celery/blob/9d49d90074445ff2c550585a055aa222151653aa/celery/app/init.py 上查看文档和评论以获取shared_task
我认为由于某些原因,您不会运行创建芹菜应用程序。在这种情况下,最好使用显式应用程序。
from .celery import app
@app.task()
def add(x, y):
return x + y