Moin zusammen,
ich habe eine Python-Anwendung mit relativ langer Berarbeitungszeit. Meine Idee war jetzt, die
Arbeit auf mehrere Rechner aufzuteilen. Damit bin ich beim CGI-Skripting gelandet. Demnach würde ich auf den zur verfügung stehenden Rechnern einen CGI-Server einrichten und dann von einem Client-Rechner die Aufgabe an die Server verteilen. Die Datenverwaltung liegt damit beim auslösenden Client-Rechner, während die Berechnung auf den Servern läuft. Ist das eingangbarer Weg oder gibt es hier noch andere (bessere) Lösungen. Die Beschleunigung hängt dann von der Verbindung zwischen den Rechnern und der Auslastung der Rechnern ab. Ich würde dann versuchen schnelle Verbindungen mit schnellen Rechnern zu bevorzugen bzw. ihnen größere Berechnungsabschnitte zuteilen. Kann man diese Information abfragen ? Welche Packete sind hierfür geeignet ?
Grüß
Bernd
Verteiltes Rechnen / Bearbeiten
@BerndB: CGI würde ich eher für Webprogrammierung verwenden, bzw. nicht einmal dafür, weil's bessere Alternativen gibt.
Wenn es Sprachunabhängig sein soll, ist wohl irgendein RPC-Mechanismus von XML-RPC oder JSON-RPC bis CORBA für verteilte Anwendungen besser geeignet als sich mit CGI abzumühen.
Wenn es auf Python beschränkt ist und Du den Rechnern vertraust, dürfte Pyro (Python Remote Objects) vielleicht einen Blick wert sein.
Wenn es Sprachunabhängig sein soll, ist wohl irgendein RPC-Mechanismus von XML-RPC oder JSON-RPC bis CORBA für verteilte Anwendungen besser geeignet als sich mit CGI abzumühen.
Wenn es auf Python beschränkt ist und Du den Rechnern vertraust, dürfte Pyro (Python Remote Objects) vielleicht einen Blick wert sein.
Moin BlackJack,
vielen Dank für das schnelle Statement. Da ich mehr in Python zu Hause bin und die Rechner mein Vertrauen haben, werde ich mich wohl erstmal mit Pyro beschäftigen, aber ich denke auch die Alternativen sollte angeschaut werden.
Ist CGI dann überholt, wenn es hierfür 'bessere Alternativen' gibt oder wo liegt der Anwendungsbereich von CGI ?
viele Grüße
Bernd
vielen Dank für das schnelle Statement. Da ich mehr in Python zu Hause bin und die Rechner mein Vertrauen haben, werde ich mich wohl erstmal mit Pyro beschäftigen, aber ich denke auch die Alternativen sollte angeschaut werden.
Ist CGI dann überholt, wenn es hierfür 'bessere Alternativen' gibt oder wo liegt der Anwendungsbereich von CGI ?
viele Grüße
Bernd
Davon ausgehend, dass du mit CGI das "Common Gateway Interface" meinst, ist das dort angesiedelt, wo sich Webserver mit weiteren auf dem gleichen Rechner laufenden Komponenten austauschen und hat nicht wirklich etwas mit deinem Problem zu tun.BerndB hat geschrieben:Ist CGI dann überholt, wenn es hierfür 'bessere Alternativen' gibt oder wo liegt der Anwendungsbereich von CGI ?
@BerndB: CGI ist eine Schnittstelle über die Webserver externe Programme starten und mit ihnen kommunizieren, das heisst Informationen vom Browser/Client an das Programm weiterleiten und dann die generierte Antwort vom Programm wieder an den Browser/Client. Das IMHO einzig schöne an dieser Schnittstelle ist, dass sie grundsätzlich mit jedem Programm bzw. mit jeder Programmiersprache funktioniert, die Daten von der Standardeingabe lesen und das Ergebnis auf die Standardausgabe schreiben kann. Das Auslesen können von Umgebungsvariablen ist von Vorteil. Damit endet die "Schönheit" aber auch schon.
In Python ist die CGI-Schnittstelle durch WSGI abgelöst. Selbst das würde ich nicht "nackt" benutzen sondern "Werkzeug" oder eines der Mikrowebrahmenwerke Bottle oder Flask benutzen. Aber das ist alles Webprogrammierung. Du willst ja eher generell eine Anwendung verteilt rechnen lassen.
In Python ist die CGI-Schnittstelle durch WSGI abgelöst. Selbst das würde ich nicht "nackt" benutzen sondern "Werkzeug" oder eines der Mikrowebrahmenwerke Bottle oder Flask benutzen. Aber das ist alles Webprogrammierung. Du willst ja eher generell eine Anwendung verteilt rechnen lassen.
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
Wenn die Unterprozesse zu Rechnenzeit Daten austauschen müssen wird es schon schwieriger. Was du auch nicht vergessen darfst: Datenverkehr im Netzwerk kostet auch Zeit. In der Zeit, wo Rechner A ein Datenpaket an B sendet und auf die Antwort wartet, dass es gut angekommen ist kann man ziemlich viele Berechnungen machen.
BTW: wie lang ist "lange Bearbeitungszeit" in Sekunden?
Gruß, noisefloor
Ist dein Problem den parallelisierbar? Im Idealfall wäre das dann z.B. so, dass du ein Hauptproblem in z.B. vier Unterprobleme aufteilen kannst, vier Berechnung gleichzeitig startest und am Ende das Ergebnis aus vier Unterergebnissen zusammenfasst.ich habe eine Python-Anwendung mit relativ langer Berarbeitungszeit. Meine Idee war jetzt, die Arbeit auf mehrere Rechner aufzuteilen.
Wenn die Unterprozesse zu Rechnenzeit Daten austauschen müssen wird es schon schwieriger. Was du auch nicht vergessen darfst: Datenverkehr im Netzwerk kostet auch Zeit. In der Zeit, wo Rechner A ein Datenpaket an B sendet und auf die Antwort wartet, dass es gut angekommen ist kann man ziemlich viele Berechnungen machen.
BTW: wie lang ist "lange Bearbeitungszeit" in Sekunden?
Gruß, noisefloor
Das dürfte mit ZMQ oder RabbitMQ kein Problem sein und eventuell macht hier sogar Redis Sinn.noisefloor hat geschrieben:Wenn die Unterprozesse zu Rechnenzeit Daten austauschen müssen wird es schon schwieriger. Was du auch nicht vergessen darfst: Datenverkehr im Netzwerk kostet auch Zeit. In der Zeit, wo Rechner A ein Datenpaket an B sendet und auf die Antwort wartet, dass es gut angekommen ist kann man ziemlich viele Berechnungen machen.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Came here to post this, aber ist halt die Frage ob es sinnvoll ist, so kleine "Berechnungspakete" zu machen.DasIch hat geschrieben:Das dürfte mit ZMQ oder RabbitMQ kein Problem sein
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice