2010-01-12 1 views
5

Python scheint many different packages available zu haben, um einen bei der parallelen Verarbeitung auf einem SMP-basierten System oder über einen Cluster hinweg zu unterstützen. Ich bin daran interessiert, ein Client-Server-System aufzubauen, in dem ein Server eine Warteschlange von Jobs und Clients (lokal oder remote) verwaltet und Jobs verbindet, bis die Warteschlange leer ist. Von den oben aufgeführten Paketen, was ist zu empfehlen und warum?Python-Parallelverarbeitungsbibliotheken

Edit: Insbesondere habe ich einen Simulator geschrieben, der einige Eingaben aufnimmt und die Dinge für eine Weile verarbeitet. Ich muss genügend Stichproben aus der Simulation sammeln, um einen Mittelwert innerhalb eines benutzerdefinierten Konfidenzintervalls zu schätzen. Um die Dinge zu beschleunigen, möchte ich in der Lage sein, Simulationen auf vielen verschiedenen Systemen auszuführen, von denen jedes in Abständen mit den Samples, die es gesammelt hat, zurück an den Server berichtet. Der Server berechnet dann das Konfidenzintervall und bestimmt, ob der Clientprozess fortgesetzt werden muss. Nachdem genügend Samples gesammelt wurden, beendet der Server alle Client-Simulationen, rekonfiguriert die Simulation basierend auf vergangenen Ergebnissen und wiederholt die Prozesse.

Mit dieser Notwendigkeit für die Kommunikation zwischen den Client- und Server-Prozessen, frage ich, ob Batch-Scheduling eine praktikable Lösung ist. Entschuldigung, ich hätte anfangs klarer sein sollen.

+0

sieht aus wie Sie nach einem Scheduler suchen? –

Antwort

2

a Haben mit ParallelPython gehen. Scheint einfach zu bedienen und sollte die gewünschte Job- und Warteschlangenschnittstelle bereitstellen.

0

Da Sie Ihre Frage "scientific-computing" getaggt haben und einen Cluster erwähnen, scheint eine Art MPI-Wrapper die offensichtliche Wahl zu sein, wenn das Ziel darin besteht, parallele Anwendungen zu entwickeln, wie der Titel vermuten lässt. Andererseits schlägt der Text in Ihrer Frage vor, dass Sie einen Batch-Scheduler entwickeln möchten. Ich weiß also nicht wirklich, welche Frage du stellst.

+0

Es würde keine Interaktion zwischen Clientprozessen geben, aber die Warteschlange/der Server würde sich basierend auf den Ergebnissen der einzelnen Clientprozesse ändern. Ich muss nur in der Lage sein, eine Reihe von Jobs dynamisch über viele Arbeitsstationen hinweg zu verwalten. –

+0

Oh. In diesem Fall haben die meisten Leute Skripte, um viele Jobs an einen vorhandenen Batch-Scheduler wie condor oder SLURM zu übergeben, die Ausgabe zu parsen und, wenn nötig, neue Jobs zu senden usw. Das ist viel weniger Aufwand als das Schreiben eines benutzerdefinierten Batch-Schedulers. – janneb

0

Der einfachste Weg, dies zu tun, würde wahrscheinlich nur die Zwischenproben in separate Dateien (oder eine Datenbank) ausgeben, wenn sie fertig sind, und ein Prozess gelegentlich diese Ausgabedateien abfragen, um zu sehen, ob sie ausreichend sind oder mehr Jobs müssen eingereicht werden.

1

Darüber hinaus gibt es jetzt zwei verschiedene Python-Wrapper um die Map/Reduce Rahmen Hadoop:

http://code.google.com/p/happy/

http://wiki.github.com/klbostee/dumbo

Map/Reduce ist eine schöne Entwicklung Muster mit vielen Rezepten für die Lösung gemeinsamer Muster von Problemen.

Wenn Sie nicht bereits über einen Cluster haben, Hadoop selbst ist schön, weil es voll Job-Scheduling hat, automatische Datenverteilung von Daten über den Cluster (d HDFS) usw.