Was Pika bietet, ist nur ein kleiner Teil dessen, was Sellerie macht. Pika ist eine Python-Bibliothek für die Interaktion mit RabbitMQ. RabbitMQ ist ein Nachrichtenbroker; im Kern sendet es nur Nachrichten an/empfängt Nachrichten von Warteschlangen. Es kann als Aufgabenwarteschlange verwendet werden, aber es kann auch nur dazu verwendet werden, Nachrichten zwischen Prozessen zu übergeben, ohne "Arbeit" zu verteilen.
Sellery implementiert eine Warteschlange für verteilte Aufgaben, optional mit RabbitMQ als Broker für IPC. Anstatt nur eine Möglichkeit zum Senden von Nachrichten zwischen Prozessen bereitzustellen, stellt es ein System zum Verteilen tatsächlicher Aufgaben/Jobs zwischen Prozessen bereit. Hier ist, wie Sellerie Website beschreibt:
Task-Warteschlangen als Mechanismus verwendet werden, die Arbeit über Threads oder Maschinen zu verteilen.
Eine Aufgabe Warteschlange ist eine Einheit der Arbeit, genannt eine Aufgabe, dedizierte Arbeiter Prozesse dann ständig überwachen die Warteschlange für neue Arbeit zu durchführen.
Sellerie kommuniziert über Nachrichten, in der Regel mit einem Vermittler zu vermitteln zwischen Kunden und Arbeitnehmern. Um eine Aufgabe zu initiieren, legt ein Client eine Nachricht in die Warteschlange, und der Broker übergibt die Nachricht dann an einen Mitarbeiter.
Ein Sellerie-System kann aus mehreren Arbeitern und Maklern bestehen, die Weg zu hoher Verfügbarkeit und horizontaler Skalierung geben.
Sellerie hat eine ganze Reihe von eingebauten Funktionen, die außerhalb von Pikas Umfang liegen. Sie können an den Celery docs einen Blick eine Vorstellung von der Art von Dingen, um es zu tun, aber hier ist ein Beispiel:
>>> from proj.tasks import add
>>> res = add.chunks(zip(range(100), range(100)), 10)()
>>> res.get()
[[0, 2, 4, 6, 8, 10, 12, 14, 16, 18],
[20, 22, 24, 26, 28, 30, 32, 34, 36, 38],
[40, 42, 44, 46, 48, 50, 52, 54, 56, 58],
[60, 62, 64, 66, 68, 70, 72, 74, 76, 78],
[80, 82, 84, 86, 88, 90, 92, 94, 96, 98],
[100, 102, 104, 106, 108, 110, 112, 114, 116, 118],
[120, 122, 124, 126, 128, 130, 132, 134, 136, 138],
[140, 142, 144, 146, 148, 150, 152, 154, 156, 158],
[160, 162, 164, 166, 168, 170, 172, 174, 176, 178],
[180, 182, 184, 186, 188, 190, 192, 194, 196, 198]]
Dieser Code will jeden x + y hinzuzufügen, wobei x in range(0, 100)
und y in range(0,100)
. Dazu wird eine Aufgabe mit der Bezeichnung add
, die zwei Zahlen hinzufügt und die Arbeit des Hinzufügens von 1+1
, 2+2
, 3+3
usw. aufteilt, in 10er-Stücke aufgeteilt und jedes Stück an so viele Sellerie-Arbeiter verteilt, wie verfügbar sind. Jeder Arbeiter wird add
auf seinem 10-Item-Chunk ausführen, bis alle Arbeit abgeschlossen ist. Dann werden die Ergebnisse durch den Anruf res.get()
gesammelt. Ich bin mir sicher, dass Sie sich einen Weg vorstellen können, dies mit Pika zu tun, aber ich bin mir sicher, dass Sie sich auch vorstellen können, wie viel Arbeit nötig wäre. Sie erhalten diese Funktionalität mit Sellerie sofort aus der Verpackung.
Sie können sicherlich Pika verwenden, um eine verteilte Aufgabenwarteschlange zu implementieren, wenn Sie möchten, besonders wenn Sie einen recht einfachen Anwendungsfall haben. Sellery bietet nur eine "Batterien inklusive" -Lösung für die Aufgabenplanung, Verwaltung usw., die Sie manuell implementieren müssen, wenn Sie sich entscheiden, dass Sie sie mit Ihrer Pika-Lösung wünschen.
Was haben Sie versucht, dass Sie nicht arbeiten konnten? Können Sie uns den Code zeigen oder vielleicht den verteilten Algorithmus beschreiben, den Sie verwenden wollten? – wheaties