/ / Einstellung der Parallelität von Sellerie auf 1 Arbeiter pro Warteschlange - Parallelität, Rabbitmq, Sellerie

Sellerie Parallelität zu 1 Arbeiter pro Warteschlange setzen - Nebenläufigkeit, Rabbitmq, Sellerie

Ich verwende im Wesentlichen rabbitmq-Schlangen in SellerieB. die Synchronisation eines armen Mannes. Wenn beispielsweise bestimmte Objekte aktualisiert werden (und hohe Kosten verursachen), werden sie anhand ihrer Objekt-IDs zu 10 Warteschlangen zusammengefasst .

Zweitens scheint es bei celeryd, dass dieDie Option für die Parallelitätsebene (CELERY_CONCURRENCY) legt die Anzahl der Arbeiter in allen Warteschlangen fest. Durch diese Art der Verwendung der Warteschlangen für die Synchronisierung als Warteschlange können mehrere Arbeiter bedient werden. Dies bedeutet potenzielle Race-Bedingungen, wenn verschiedene Aktionen für dasselbe Objekt ausgeführt werden.

Gibt es eine Möglichkeit, die Parallelitätsebene (oder die Optionen für Worker-Pools) so festzulegen, dass ein Worker pro N Warteschlangen vorhanden ist?

Vielen Dank Sri

Antworten:

2 für die Antwort № 1

Warum implementieren Sie nicht einfach ein globales Task-Lock-System, indem Sie memcache oder eine nosql-Datenbank verwenden? Auf diese Weise vermeiden Sie jegliche Rennbedingungen.

Hier ein Beispiel http://ask.github.com/celery/cookbook/tasks.html#ensuring-a-task-is-only-executed-one-at-a-time


0 für die Antwort № 2

In Bezug auf den ersten Teil Ihrer Frage habe ich hier eine ähnliche Frage gestellt und beantwortet: Weg zum Arbeiter je nach Ergebnis in Sellerie?

Sie können im Wesentlichen direkt an einen Arbeiter weiterleitenabhängig von einem Schlüssel, der in Ihrem Fall eine ID ist. Es vermeidet die Notwendigkeit eines einzelnen Verriegelungspunktes. Hoffentlich ist es nützlich, obwohl diese Frage 2 Jahre alt ist :)