在Windows上使用Python 2.7和Celery 3.1.25,当我们使用以下命令运行Celery worker
celery -A proj worker -l info
我们收到错误
ImportError: No module named celery
问题:当我们停止工作时,工人停止工作
- 将文件的名称从
celery.py
celeryApp.py
更改 - 将
tasks.py
中的导入语句从from .celery import app
更改为from celeryApp import app
。
为什么会这样?我们如何解决这个问题?
目录结构
/proj/__init__.py
/proj/celeryApp.py
/proj/tasks.py
/proj/celeryApp.py
from __future__ import absolute_import, unicode_literals
from celery import Celery
app = Celery('tasks',
broker='amqp://jack:jack@192.168.1.26:5672//',
backend='amqp://',
include=['proj.tasks'])
if __name__ == '__main__':
app.start()
/proj/tasks.py
from __future__ import absolute_import, unicode_literals
from celeryApp import app
@app.task
def add(x, y):
return x + y
启动芹菜工作器时,应命名应用以匹配配置芹菜模块的 python 文件。您应该从
celery worker -l info -A tasks
您不应将配置文件命名为 celery.py
。这将在开始导入时导致问题
from celery import Celery
您的文件应该命名为其他名称,但不应命名为 celery.py
。
同样在您的配置文件中,无需添加
if __name__ == '__main__':
app.start()
如果您要显式包含proj.tasks
请确保proj
在python路径中,或者您可以在使用tasks
应用程序启动工作时将其删除。