使用 Python 3 时,Celery 'module' 对象没有属性 'app'

pyt*_*had 5 python celery python-3.x

我正在学习芹菜教程。他们正在使用 Python2,而我正在尝试使用 python3 实现相同的功能。

我有2个文件:

celery_proj.py :

from celery import Celery

app = Celery(
    'proj', broker='amqp://', backend='amqp://', include=['proj.tasks'])

app.conf.update(Celery_TAST_RESULT_EXPIRES=3600,)

if __name__ == '__main__':
    app.start()
Run Code Online (Sandbox Code Playgroud)

任务.py

from celery_proj 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)
Run Code Online (Sandbox Code Playgroud)

当我尝试跑步时,celery -A proj worker -l info我得到:

Traceback (most recent call last):
  File "/usr/local/lib/python3.4/dist-packages/celery/app/utils.py", line 235, in find_app
    found = sym.app
AttributeError: 'module' object has no attribute 'app'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/bin/celery", line 11, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.4/dist-packages/celery/__main__.py", line 30, in main
    main()
  File "/usr/local/lib/python3.4/dist-packages/celery/bin/celery.py", line 81, in main
    cmd.execute_from_commandline(argv)
  File "/usr/local/lib/python3.4/dist-packages/celery/bin/celery.py", line 769, in execute_from_commandline
    super(CeleryCommand, self).execute_from_commandline(argv)))
  File "/usr/local/lib/python3.4/dist-packages/celery/bin/base.py", line 309, in execute_from_commandline
    argv = self.setup_app_from_commandline(argv)
  File "/usr/local/lib/python3.4/dist-packages/celery/bin/base.py", line 469, in setup_app_from_commandline
    self.app = self.find_app(app)
  File "/usr/local/lib/python3.4/dist-packages/celery/bin/base.py", line 489, in find_app
    return find_app(app, symbol_by_name=self.symbol_by_name)
  File "/usr/local/lib/python3.4/dist-packages/celery/app/utils.py", line 240, in find_app
    found = sym.celery
AttributeError: 'module' object has no attribute 'celery'
Run Code Online (Sandbox Code Playgroud)

我做错了什么以及如何解决这个问题?

小智 7

当你运行 Celery 时celery -A proj worker

AttributeError: 'module' object has no attribute 'app'
...
AttributeError: 'module' object has no attribute 'celery'
Run Code Online (Sandbox Code Playgroud)

告诉你它试图找到:

a)app实例

b)proj.celery模块

因此,您可以添加from celery_proj import app__init__.py或重命名celery_proj.pycelery.py

或者你可以运行 Celerycelery -A proj.celery_proj worker

我在这里找到了答案,因为 stackoverflow 上没有答案对我有帮助。


Bra*_*don 4

如果您使用的是 Python 3,则可以通过以下方式使用绝对导入:from __future__ import absolute_import

celery.py这是我最近的一个 Python 3、Django 1.7 应用程序的示例:

from __future__ import absolute_import

import os
import django

from celery import Celery
from django.conf import settings


# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_app.settings')
django.setup()

app = Celery('my_app')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
Run Code Online (Sandbox Code Playgroud)