2010-07-31 14 views
9

Ich führe Django mit Sellerie auf RabbitMQ als Warteschlange für einige Datenverarbeitungsaufgaben. Ich starte Sellerie-Aufgaben, wenn sich ein Benutzer zum ersten Mal anmeldet, sowie regelmäßig, um seine Daten zu aktualisieren. Allerdings möchte ich natürlich den Aufgaben Priorität einräumen, die Benutzer ausführen, die gerade online sind. Mir ist aufgefallen, dass es eine Prioritätensetzung für Aufgaben in Sellerie 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 zwei verschiedene Warteschlangen vor, eine mit hoher Priorität und eine mit niedriger Priorität oder eine Ratenbegrenzung für Aufgaben mit niedrigerer Priorität.Workaround für die Sellerie-Aufgabenpriorität auf RabbitMQ?

Hat jemand einen guten Workaround, um die Priorität zu implementieren? Danke im Voraus!

Antwort

2

Abgesehen davon, können Sie dringende Aufgaben Push-to einige Warteschlange (sagen wir eilig-Warteschlange) und setzen Verbraucherprioritäten, dh, alle Verbraucher nehmen die Aufgabe von eiligen-Warteschlange mit hoher Priorität.

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

Auf Verbraucherseite können Sie x-Priorität Argument in Warteschlangen definieren, aus zu konsumieren. In dem unten stehenden Beispiel nimmt den Verbraucher bis Aufgaben aus Sellerie Warteschlange mit Priorität 0 und von 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}), 
) 
Verwandte Themen