坚持芹菜教程

时间:2016-12-29 04:41:41

标签: python import celery

我的文件夹结构是

proj/
    __init__.py
    celery_app.py
    tasks.py

我的celery_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()

和我的tasks.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:没有名为celery_app"

的模块

当我从

切换时
  

来自celery_app导入应用

  <。>来自.celery_app导入应用

然后它的作品!但是当我尝试从python shell中的任务import *运行时,我得到了

  

ValueError:在非包中尝试相对导入

但是如果我回去取走前面的话。在celery_app前面,我可以成功导入它。为什么会发生这种情况,我需要更改为每个脚本导入成功运行的方式?

3 个答案:

答案 0 :(得分:1)

使用绝对导入绝对是正确的做法。所以你应该继续使用这个导入语句

String msg = "";

for (int i = 2; i < args.length; i++)
{
    msg = msg + args[i] + " ";
}

Util.messagePlayer(player, msg);

为了解决在尝试在交互式python会话中导入时遇到的问题,您应该在包含from .celery_app import app 的同一目录中启动会话,然后执行:< / p>

proj

我已将您的代码复制到我的机器上并完成了我上面的建议并且工作正常。

答案 1 :(得分:0)

运行这些命令:

cd proj
celery -A proj worker --app=celery_app:app -l info

要正确运行python脚本,您必须位于该脚本文件夹中。这就是你得到这个错误的原因

  

ImportError:没有名为celery_app的模块

答案 2 :(得分:-1)

你可以尝试在$ PYTHONPATH变量中添加路径。