2017-05-08 1 views
2

abmp.py:

from celery import Celery 
app = Celery('abmp', backend='amqp://[email protected]',broker='amqp://[email protected]') 

@app.task(bind=True) 
def add(self, a, b): 
    return a + b 

execute_test.py

from abmp import add 

add.apply_async( 
args=(5,7), 
queue='push_tasks', 
exchange='push_tasks', 
routing_key='push_tasks' 
) 

ausführen Sellerie

celery -A abmp worker -E -Q push_tasks -l info 

ausführen execute_test.py

python2.7 execute_test.py。 

schließlich auf die rabb itmq Hintergrundansicht und festgestellt, dass die Implementierung von execute_test.py jedes Mal, um eine neue Warteschlange zu generieren, anstatt die Aufgabe in push_tasks Warteschlange geworfen.Warum wird jedes Mal eine neue Warteschlange von sellery + rabbitmq generiert?

Antwort

0

Sie verwenden AMQP als Ergebnis-Backend. Sellerie speichert das Ergebnis jeder Aufgabe als neue Warteschlange, die mit der ID der Aufgabe benannt wird. Verwenden Sie ein besser geeignetes Backend (z. B. Redis), um das Spammen neuer Warteschlangen zu vermeiden.

+0

danken Ihnen für Ihre Hilfe, es ist greate – shenyang

0

Wenn Sie AMQP als Ergebnis-Backend für Sellery verwenden, ist das Standardverhalten das Speichern aller Aufgabenergebnisse (für einen Tag gemäß den FAQs in http://docs.celeryproject.org/en/latest/faq.html).

Gemäß der Dokumentation zur aktuellen stabilen Version (4.1) ist dies veraltet und sollte nicht verwendet werden.

Ihre Optionen sind,

  • Verwenden result_expires Einstellung, wenn Sie im Voraus als Backend mit AMQP gehen zu planen.
  • eine andere Backend verwenden (wie redis)
  • Wenn Sie überhaupt die Ergebnisse nicht brauchen, Benutzer ignore_result
  • Einstellung
Verwandte Themen