Hier ist eine einfache Möglichkeit, dies zu tun.
Erstellen Sie eine gemeinsame gemeinsame Warteschlange der Arbeit zu tun. Diese Anwendung füllt diese Warteschlange mit Arbeit zu tun.
Erstellen Sie eine Anwendung, die ein Element aus der Warteschlange erhält und die Arbeit erledigt.
Dies ist das Single-Producer-Multiple-Consumer-Design. Es funktioniert gut und kann Ihre Maschine mit parallelen Prozessen überschwemmen.
Um die integrierte Queue-Klasse zu verwenden, müssen Sie die Queue in eine Art Multi-Processing-API einbinden. http://docs.python.org/library/queue.html. Persönlich möchte ich einen kleinen HTTP-basierten Webserver erstellen, der die Warteschlange verarbeitet. Jede Anwendung führt eine GET, um das nächste Stück Arbeit zu holen.
Sie können Tools wie RabbitMQ verwenden, um eine sehr gute gemeinsame Warteschlange zu erstellen. http://nathanborror.com/posts/2009/may/20/working-django-and-rabbitmq/
Möglicherweise können Sie http://hjb.python-hosting.com/ verwenden, um JMS-Warteschlangen zu verwenden.
Sie benötigen eine kleine Anwendung zum Erstellen und Füllen der Warteschlange mit Arbeit.
Erstellen Sie so viele Kopien der Anwendung, wie Sie möchten. Beispiel:
for i in 1 2 3 4 5 6 7 8 9 10
do
python myapp.py &
done
Dadurch werden 10 gleichzeitige Kopien Ihrer Anwendung ausgeführt. Alle 10 versuchen, Arbeit aus einer einzigen Warteschlange zu bekommen. Sie werden alle verfügbaren CPU-Ressourcen nutzen und das Betriebssystem plant sie für Sie.
Peer, Knoten-zu-Knoten-Synchronisierungs bedeutet Sie O (n * (n-1)/2) haben, Kommunikationswege zwischen allen Knoten.
Die "zwei benachbarten Knoten" bedeutet, dass Sie immer noch 2 * n Kommunikationswege haben und die Arbeit "irgendwie" unter den Knoten rinnen muss. Wenn die Knoten alle anfänglich mit Arbeit versehen sind, hat jemand viel geplant, um die Arbeitsbelastung auszugleichen. Wenn Sie so viel planen, warum bitten Sie die Knoten, sich überhaupt zu synchronisieren?
Wenn die Warteschlangen nicht sorgfältig aufeinander abgestimmt sind, kann jeder gerade Knoten langsam sein. Jeder ungerade Knoten könnte schnell sein.Die ungeraden Knoten beenden zuerst, prüfen auf Arbeit von zwei geraden Knoten, und diese Knoten sind (a) nicht fertig und (b) haben auch nicht mehr zu tun. Was jetzt? Die Hälfte der Knoten arbeitet, die andere ist inaktiv. Alles wegen der schlechten Planung in der anfänglichen Verteilung der Arbeit.
Master-Slave bedeutet, dass Sie n Kommunikationswege haben. Darüber hinaus erfolgt der Ausgleich automatisch, da alle unbelegten Knoten den gleichen Zugriff auf die Arbeit haben. Es gibt keine voreingenommene Anfangsverteilung, die zu einer schlechten Gesamtleistung führt.
Danke, das den aktuellen Entwurf des Programms ähnlich ist, aber sie wollen, einen Knoten zu Knoten Struktur haben, anstatt eine Master-Slave-Struktur. Würde eine einzelne Warteschlange, auf die mehrmals von mehreren Prozessen aus zugegriffen wird, einen möglichen Engpass in einem Cluster verursachen? – patemotter
@DistortedLojik: Einzelne Warteschlange sollte kein Problem sein, wenn jedes Arbeitspaket mikroskopisch klein ist. Es ist reiner Overhead, also möchten Sie, dass sich die Kosten für den Zugriff auf Warteschlangen über viele hochwertige Arbeiten amortisieren. –