Sellerie AttributeError: async-error
Ich habe RabbitMQ und Sellerie läuft lokal auf meinem Mac (OS/X 10.13.4), der folgende code funktioniert lokal bei mir laufen hinzufügen.Verzögerung(x,y):
#!/usr/bin/env python
from celery import Celery
from celery.utils.log import get_task_logger
logger = get_task_logger(__name__)
app = Celery('tasks', \
broker='pyamqp://appuser:xx@c2/appvhost', \
backend='db+mysql://appuser:xx@c2/pigpen')
@app.task(bind=True)
def dump_context(self, x, y):
print('Executing task id {0.id}, args: {0.args!r} kwargs {0.kwargs!r}'.format(self.request))
@app.task
def add(x, y):
logger.info('Adding {0} + {1}'.format(x, y))
return x + y
Aber wenn ich versuche, führen Sie den Sellerie Arbeiter auf einem ODROID-C2 ausgeführt Kali 2018.2 (w. aktuelle updates, bekomme ich die folgende Fehlermeldung beim ausführen celery -A tasks worker --loglevel=info
:
Traceback (most recent call last):
File "/usr/local/bin/celery", line 11, in <module>
sys.exit(main())
File "/usr/local/lib/python2.7/dist-packages/celery/__main__.py", line 14, in main
_main()
File "/usr/local/lib/python2.7/dist-packages/celery/bin/celery.py", line 326, in main
cmd.execute_from_commandline(argv)
File "/usr/local/lib/python2.7/dist-packages/celery/bin/celery.py", line 488, in execute_from_commandline
super(CeleryCommand, self).execute_from_commandline(argv)))
File "/usr/local/lib/python2.7/dist-packages/celery/bin/base.py", line 281, in execute_from_commandline
return self.handle_argv(self.prog_name, argv[1:])
File "/usr/local/lib/python2.7/dist-packages/celery/bin/celery.py", line 480, in handle_argv
return self.execute(command, argv)
File "/usr/local/lib/python2.7/dist-packages/celery/bin/celery.py", line 412, in execute
).run_from_argv(self.prog_name, argv[1:], command=argv[0])
File "/usr/local/lib/python2.7/dist-packages/celery/bin/worker.py", line 221, in run_from_argv
return self(*args, **options)
File "/usr/local/lib/python2.7/dist-packages/celery/bin/base.py", line 244, in __call__
ret = self.run(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/celery/bin/worker.py", line 255, in run
**kwargs)
File "/usr/local/lib/python2.7/dist-packages/celery/worker/worker.py", line 99, in __init__
self.setup_instance(**self.prepare_args(**kwargs))
File "/usr/local/lib/python2.7/dist-packages/celery/worker/worker.py", line 122, in setup_instance
self.should_use_eventloop() if use_eventloop is None
File "/usr/local/lib/python2.7/dist-packages/celery/worker/worker.py", line 241, in should_use_eventloop
self._conninfo.transport.implements.async and
File "/home/autossh/.local/lib/python2.7/site-packages/kombu/transport/base.py", line 125, in __getattr__
raise AttributeError(key)
AttributeError: async
Aus dem Kali ODROID ich bin in der Lage, die Verbindung zum RabbitMQ-Instanz auf dem host mit der Bezeichnung c2 mit einem Python-Pika-Skript und mysql aus, das Gerät funktioniert, um die c2-Maschine als gut. Ich habe ähnliche Fehler, ist keine dieser Lösungen haben für mich gearbeitet.
Sellerie-version des ODROID-C2 via pip:
celery --version
4.1.0 (latentcall)
- Etwas unglücklich schien es zu Pause schon ein paar Völker prod. Es gibt ein paar GitHub-Probleme über it-als auch...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sortiert, indem Sie einfach die Aktualisierung auf Sellerie==4.1.1
es wohl der Letzte release der 4.1.X sortiert, den Namen des Moduls ändern auf kombu
kombu==4.1.0
und dann später ein upgrade Sellerie, du wirst nur erleben dieses Problem wieder alles vorbei.Stellen Sie sicher, dass Sie mit Kombu 4.1.0. Die neueste version von Kombu benennt async asynchron.
celery==4.1.1
. Wenn Siekombu==4.1.0
werden Sie nur stoßen diese Frage wieder, wenn Sie ein upgrade Sellerie Vergangenheit 4.1.0.Sellerie nicht pin Ihre Anforderungen für kombu und Billard auf bestimmte Versionen. Sie benötigen die folgenden:
https://github.com/celery/celery/blob/v4.1.0/requirements/default.txt
kombu 4.2.0 veröffentlicht wurde, eine wichtige änderung gegenüber früheren Versionen von Sellerie automatisch zu installieren.
Da Sellerie nicht pin-spezifischen Versionen, sollten Sie die pin der folgenden wenn, Sie auch weiterhin zu verwenden, Sellerie 4.1.0:
billiard==3.5.0.2
. Pip installieren schlägt fehl mit3.0.5.2
.pip install --upgrade 'celery>=4.2.0rc4'
kombu==4.2.0
benenntasync
zuasynchronous
, Sellerie fixiert es incelery==4.2.0rc4
.So sollten Sie ein upgrade Sellerie 4.2.0rc4.
finden: https://github.com/celery/celery/commit/c8ef7ad60b72a194654c58beb04a1d65cd0435ad
Das Problem war, es war in der Tat die kombu-version.
Ich es geschafft 2 Versionen von kombu installiert, 4.2.0 als
'appuser'
user, die ich versucht habe zu starten, die Arbeiter unter, und 4.1.0 als'root'
. Die 4.1.0 als'root'
arbeiten würde, die anderen Benutzer nicht.Habe ich entfernt, kombu 4.2.0 aus der
'appuser'
Benutzerkonto (pip uninstall kombu als Benutzer), so würde es die system-weit installiert Paket und den Sellerie Arbeiter korrekt betrieben werden unter diesem Konto.Um sicherzustellen, dass es ist in der Tat kombu 4.2.0, das bricht, habe ich entfernt, die system-weit 4.1.0 version und lassen Sie pip installieren Sie die neueste version, die er bekommt als 4.2.0 ist, und die Sellerie-Arbeiter würde nicht mehr starten. Ich es deinstalliert und gezwungen pip zu installieren 4.1.0 (pip installieren kombu==4.1.0) und die Arbeiter korrekt betrieben werden.
Als ein check, ging ich zu meinem Mac, wo ich ursprünglich geschrieben/getestet mit diesem code, und überprüft die kombu-version installiert, gibt es von pip: 4.1.0. Ich bin mir nicht sicher, warum pip auf der Mac-und Pi3 installiert die version 4.1.0 von kombu, während pip auf die ODROID-C2 installiert die 4.2.0 version. Ich werde Graben mehr, wenn ich eine chance bekommen, aber es funktioniert jetzt.
root
war pre-release 4.2.0, und bei der Installation w/appuser
es war post-4.2.0 release, da @Daniel sagt, Sellerie nicht pin-version, die so einfach installiert die neueste version, das ist <5.0.Einen schnellen hack fix ist, deaktivieren Sie das Ergebnis im backend: