Verteiltes Rechnen / Bearbeiten

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
BerndB
User
Beiträge: 14
Registriert: Freitag 28. Mai 2010, 15:49

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
BlackJack

@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.
BerndB
User
Beiträge: 14
Registriert: Freitag 28. Mai 2010, 15:49

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
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

BerndB hat geschrieben:Ist CGI dann überholt, wenn es hierfür 'bessere Alternativen' gibt oder wo liegt der Anwendungsbereich von CGI ?
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.
BlackJack

@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.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Würde es nicht deutlich mehr Sinn machen für die Kommunikation celery zu nutzen?
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
ich habe eine Python-Anwendung mit relativ langer Berarbeitungszeit. Meine Idee war jetzt, die Arbeit auf mehrere Rechner aufzuteilen.
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.

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
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

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. ;-)
Das dürfte mit ZMQ oder RabbitMQ kein Problem sein und eventuell macht hier sogar Redis Sinn.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

DasIch hat geschrieben:Das dürfte mit ZMQ oder RabbitMQ kein Problem sein
Came here to post this, aber ist halt die Frage ob es sinnvoll ist, so kleine "Berechnungspakete" zu machen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten