无法运行本地Celery工作程序,没有名为myapp

时间:2017-10-31 18:37:56

标签: python django celery django-celery

我有一个带有Celery 3.1.25的Django 1.11项目,其布局如下:

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语句,以确保它能够加载所有内容,并且每行都可以正确完成。

3 个答案:

答案 0 :(得分:0)

问题结果是缺少初始化Django的sys.path问题。工作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)

答案 1 :(得分:0)

我正在关注一个教程(我是celery的新手),并且在其中运行“任务”应用的命令为:

subs(A, x = 2);

但这对我不起作用; 仅此有效(颠倒some_app和worker的顺序)

celery -A worker some_app -l info

第二个代码似乎更有意义,但我不确定为什么第一个代码对本教程中的那个人有用,但对我却不起作用...除非该代码在较旧的版本中可用,而不在我的版本中有效有。

答案 2 :(得分:0)

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

相关问题