Sellerie - 'Modul' - Objekt hat kein Attribut 'app', wenn Sie mit Python 3
Gehe ich durch Sellerie tutorial. Sie sind mit Python2 und ich bin zu versuchen, das gleiche mit Python ist3.
Habe ich 2 Dateien:
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()
und tasks.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)
Wenn ich versuche zu laufen celery -A proj worker -l info
ich bin immer :
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'
Was mache ich falsch und wie man dieses Problem beheben?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie mit Python 3, Sie kann absolute Importe per:
from __future__ import absolute_import
Hier ist ein Beispiel
celery.py
aus einer aktuellen Python 3, Django 1.7 app von mir:Beim ausführen von Sellerie mit
celery -A proj worker
Ihnen sagen, dass es versucht, zu finden:
a)
app
Instanzb)
proj.celery
ModulSo können Sie entweder fügen Sie
from celery_proj import app
zu__init__.py
oder benennen Sie Ihrecelery_proj.py
zucelery.py
.Oder Sie führen die Sellerie als
celery -A proj.celery_proj worker
Fand ich die Antwort hier als keine Antwort hier auf stackoverflow hatte mir geholfen.
Ich habe das Spiel und verstanden haben, eine interessante Sache.
Wenn wir laufen
celery -A proj worker -l info
wir grundsätzlich laufenproj
Ordner. Ich glaube, dass, wenn Sie laufenproj
Ordner, Sellerie sieht fürcelery.py
- Datei gibt. Es war OK, python2, wie wir absoluten Importe und schreiben konntefrom proj.celery import ...
aber in Python ist3 hier ist keine solche Möglichkeit. Wir schreiben müssenfrom celery import ...
- und dies wird einen Fehler verursachen, alscelery
ist ein Modul, so müssen wir uns umbenennen celery.py um etwas anderes. Wenn wir dies tun, können wir nicht ausführenproj
mehr. Vielleicht bin ich falsch, aber zumindest habe ich es zu arbeiten...Was Sie tun müssen, ist öffnen Sie
proj
- Verzeichnis und führen Sie tasks.py von dort aus, nur dann werden Sie in der Lage sein zu verwendenfrom celery_proj import app
und haltencelery_proj
.Bitte schreiben, wenn ich mich nicht Irre, und fügen Sie Ihre Lösungen.
Ich hatte das gleiche problem beim ausführen von Sellerie und django-app, die in einem docker-container. Sieht aus wie der Sellerie Arbeiter Befehl sucht die aktuellen Verzeichnis für die Sellerie-app. Wenn der Befehl ausgeführt wurde, aus jedem beliebigen Verzeichnis mit diesem Attribut wird nicht gefunden " - Fehler Auftritt. Aber wenn es die django-app-Verzeichnis (wo Sie finden die app/- Module), die Sellerie worker läuft als erwartet.