我的文件夹结构是
proj/
__init__.py
celery_app.py
tasks.py
我的芹菜_App看起来像
from __future__ import absolute_import, unicode_literals
from celery import Celery
app = Celery('proj',
broker='amqp://',
backend='amqp://',
include=['proj.tasks'])
# Optional configuration, see the application user guide.
app.conf.update(
result_expires=3600,
)
if __name__ == '__main__':
app.start()
和我的任务。py看起来像
from __future__ import absolute_import, unicode_literals
from celery_app import app
@app.task
def add(x, y):
return x + y
@app.task
def mul(x, y):
return x * y
@app.task
def xsum(numbers):
return sum(numbers)
当我转到命令行并运行
时 celery -A proj worker --app=proj.celery_app:app -l info
我有一个错误
" Importerror:no模块名为CELERY_APP"
当我从
切换时来自Celery_App Import App
to
来自.celery_app导入应用
然后它起作用!但是,当我尝试从python shell导入的任务 *跑步时,我得到
value error:在非包装中尝试相对导入
但是,如果我回去拿走前面的。在Celery_app面前,我可以成功地导入它。为什么我需要更改如何导入它以使每个脚本成功运行?
使用绝对导入是绝对正确的事情。因此,您应该继续使用此导入语句
from .celery_app import app
为了在尝试在交互式Python会话中导入您遇到的问题,您应该在包含proj
的同一目录中启动会话,然后进行:
from proj.tasks import *
我已经将您的代码复制到我的机器上,并按照上面的建议做了。
运行这些命令:
cd proj
celery -A proj worker --app=celery_app:app -l info
要正确运行Python脚本,您必须在该脚本文件夹中。这就是为什么您会遇到此错误
Importerror:没有名为CELERY_APP
的模块
您可以尝试在$ PythonPath变量中添加路径。