无法运行本地 Celery 工作线程,没有名为 myapp 的模块



我有一个 Django 1.11 项目,使用 Celery 3.1.25,布局如下:

env
myproject
    myapp
    myotherapp
    settings
         settings.py
    __init__.py
    celery_init.py

我的__init__.py包含:

from .celery_init import app as celery_app

我的celery_init.py包含:

from __future__ import absolute_import
import os
import sys
import traceback
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings.settings')
from django.conf import settings
app = Celery('myproject')
# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))

当我去启动当地的芹菜工人进行开发测试时,有:

env/bin/celery worker -A myproject -l info -n sr@%h -Q somequeue

它失败,但出现异常:

ImportError: No module named myapp

这是什么原因造成的?我认为这是一些路径问题,无法正确加载我的项目设置,但我没有看到我的配置有问题。我刚刚升级到 Django 1.11,这些设置在以前的版本中运行良好。我做错了什么?

我尝试在celery_init.py末尾添加 print 语句,以确保它加载所有内容,并且每一行都完成而不会出错。

这个问题原来

是一个sys.path问题,再加上缺乏初始化Django。工作celery_init.py如下所示:

from __future__ import absolute_import
import os
import sys
from celery import Celery
import django
app = Celery('myproject')
app.config_from_object('django.conf:settings', namespace='CELERY')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings.settings')
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '../myproject')))
django.setup()
from django.conf import settings
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

我遇到了同样的问题。我解决了将 --workdir 参数放在 manage.py 所在的目录中的问题。我现在正在使用芹菜 4.4.0

我正在遵循一个教程(我是芹菜的新手),其中运行"任务"应用程序的命令是:

celery -A worker some_app -l info

但这对我不起作用;只有这样有效(颠倒some_app和工人的顺序)

celery -A some_app worker -l info

似乎第二个代码更有意义,但我不确定为什么第一个代码适用于教程中的那个人而不是我......除非这在旧版本中有效,而不是在我拥有的版本中。

相关内容

  • 没有找到相关文章

最新更新