9 Stimmen

Workaround für die Priorität von Celery-Aufgaben auf RabbitMQ?

Ich führe Django mit Celery auf RabbitMQ als Warteschlange aus, um einige Datenverarbeitungsaufgaben zu erledigen. Ich starte Celery-Aufgaben, wenn sich ein Benutzer zum ersten Mal anmeldet, sowie regelmäßig, um ihre Daten zu aktualisieren. Ich möchte jedoch natürlich den Aufgaben Vorrang einräumen, die Benutzer ausführen, die gerade online sind. Ich habe festgestellt, dass es eine Prioritätseinstellung für Tasks in Celery gibt, aber es scheint, dass RabbitMQ dies nicht unterstützt. Dieser Thread http://groups.google.com/group/celery-users/browse_thread/thread/ac3b6123d63421e5/b7740def1389e87e?lnk=gst&q=priority#b7740def1389e87e schlägt vor, zwei verschiedene Warteschlangen zu haben, eine mit hoher Priorität und eine mit niedriger Priorität, oder ein Zeitlimit für Aufgaben mit niedrigerer Priorität festzulegen.

Hat jemand einen guten Lösungsweg, um Prioritäten zu implementieren? Danke im Voraus!

0 Stimmen

Überprüfe diese Frage und Antworten.

5voto

tobych Punkte 2841

2voto

Rajs123 Punkte 645

Abgesehen davon können Sie dringende Aufgaben in eine Warteschlange schieben (sagen wir urgent-queue) und Verbraucherprioritäten setzen, d.h., lassen Sie alle Verbraucher die Aufgabe aus der urgent-queue mit hoher Priorität abholen.

https://github.com/celery/celery/issues/3098

Am Verbraucherende können Sie das Argument x-Priority in den Warteschlangen definieren, aus denen konsumiert werden soll. Im folgenden Beispiel holt der Verbraucher Aufgaben aus der Celery-Warteschlange mit Priorität 0 und aus hipri mit Priorität 10.

Beispiel:

CELERY_QUEUES = (
    Queue('celery', Exchange('celery', type='direct'), routing_key='celery',
          consumer_arguments={'x-priority': 0}),
    Queue('hipri', Exchange('hipri', type='direct'), routing_key='hipri',
          consumer_arguments={'x-priority': 10}),
)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X