我的Django 1.6.5项目具有以下布局:
project
├── reports
│ ├── __init__.py
│ ├── models.py
│ ├── tasks.py
│ ├── tests.py
│ ├── views.py
├── __init__.py
├── manage.py
├── celery.py
├── settings.py
├── urls.py
Django和Celery建议的布局如下:
project
├── project
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ ├── celery.py
├── reports
│ ├── __init__.py
│ ├── models.py
│ ├── tasks.py
│ ├── tests.py
│ ├── views.py
├── manage.py
我已经关注了Celery的Django项目教程(http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html)。
问题在于,当我尝试使用以下命令运行芹菜节拍(来自/ home / project)时:
celery -A project worker -B
我明白了:
ImportError: No module named project
这对我使用建议的布局的测试项目起作用,但我无法使用这个特定的布局,顺便说一下,我无法改变。
这些是我的文件:
celery.py
from __future__ import absolute_import
import os, sys
from celery import Celery
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
from django.conf import settings # noqa
app = Celery('project')
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))
芹菜配置@ settings.py:
# Celery settings
BROKER_URL = 'amqp://guest:guest@localhost//'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
tasks.py
from __future__ import absolute_import
from celery.decorators import periodic_task
from datetime import timedelta
@periodic_task(run_every=timedelta(seconds=5))
def test_periodic_task():
print 'Testing periodic task..'
答案 0 :(得分:2)
包含project
模块的文件夹不在您的系统路径中。运行celery.py
时,当前工作目录/path/to/project/
将添加到路径中,但您需要添加一级的目录/path/to/
,以便导入{{1}模块:
project
答案 1 :(得分:2)
您可以在命令中使用--workdir
之类的
celery -A project worker -B --workdir /path/to/project
注意:项目目录应具有__init__.py
文件