starten mehrere prozesse in mehreren fenstern mit subprocess

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
boriq
User
Beiträge: 8
Registriert: Donnerstag 17. September 2009, 11:27

Hallo Forum,

ich hab follgendes Problem. Ich möchte mehrere Simulationen (Prozesse) gleichzeitig starten. Normalerweise wird eine Simulation mit einem Befehl in Eingabeaufforderung ohne selbst ein neues Fenster zu öffnen gestartet und gerechnet. Dabei werden in der Eingabeaufforderung die Ausgaben der Simulation gezeigt.
Was ich jetzt machen möchte ist mit Hilfe von Python ein Skript zu schreiben, das die Simulationen in jeweils einem neuen Fenster startet und wenn die Simulation gerechnet ist, sendet ein Signal an Python, dass er weiss, das die Simulation fertig ist.
Ich sollte dabei sagen können wieviel Simulationen paralell laufen sollen.

Ein Beispiel:
Ich brauche 10 Simulationen zu rechnen. Ich habe 8 Kerne und einen will ich für andere Tätigkeiten frei haben, d.h. 7 Kerne sind frei für die Simulationen.
Ich starte das Python-Skript mit der Eingabe von 7 Kernen und Namen der Simulationen. Es sollten 7 Simulationen gleichzeitig gerechnet werden in separaten Fenstern und sobald die erste Simulation fertig ist, soll die nächste in neuem Fenster gestartet werden. Alles von Python gesteuert.

Wichtig ist dabei für mich, das die Sims nicht in einem Fenster laufen, weil dabei die Simulationsoutputs zusammen gemischt werden.

Ich habe im forum gesucht, viele Threads über subprocess gelesen aber nicht wirklich weiter gekommen.
Hat vielleicht jemand einen Tip für mich ob es überhaupt möglich ist?

Danke.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Was ist überhaupt ein "Fenster"?

Wie kann man "erkennen", dass eine Simulation fehlerfrei beendet ist (Stichwort Rückgabewert des Programms)?

Prinzipiell sollte so was schon möglich sein, aber es hängt eben hier viel von Details ab.
boriq
User
Beiträge: 8
Registriert: Donnerstag 17. September 2009, 11:27

Unter Fenster verstehe ich Eingabeaufforderungsfenster, aber prinzipiell muss nicht sein. Ich brauche nur irgendwo sehen wie die Simulation läuft. Ich dachte nur mit Eingabeaufforderung ist es am einfachsten machbar.

zu der Rückgabewert:
es gibt eine Rückgabewert 0 wenn fehlerfrei beendet und alles ausser 0 bedeutet dann das irgendwas stimmt mit der Simulation nicht
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

boriq hat geschrieben:Unter Fenster verstehe ich Eingabeaufforderungsfenster, aber prinzipiell muss nicht sein. Ich brauche nur irgendwo sehen wie die Simulation läuft. Ich dachte nur mit Eingabeaufforderung ist es am einfachsten machbar.
Ich fände es sehr unübersichtlich mit 7 Kommandozeilen-Fenstern. Würde lieber in Log-Dateien schreiben.

Zu deinem Problem allgemein könnte das ``multiprocessing`` Modul ziemlich interessant sein.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Mir fällt auch als Erstes multiprocessing ein. Aber damit verteilst Du 1 Simulation auf x-Prozesse. (Was eine Simulation schneller machen kann - oder auch nicht.) Wenn Du eine Applikation x-Mal startest, startest Du eben x-Applikationen und x-Prozesse.

Bei einer Simulationsanwendung eben: 1 Simulation - eine Antwort, 7 Simulationen - 7 Antworten. Mußt halt wissen, was Du willst. Prinzipiell aber dürfte schwierig, sehr schwierig sein bei parallel laufenden Prozessen eine sinnvolle Fortschrittsanzeige zu machen. Erst mit gelegentlichen 'joins', weißt Du überhaupt, wo Deine Simulation gerade ist. Oder sieht das jemand anders?

Gruß,
Christian
boriq
User
Beiträge: 8
Registriert: Donnerstag 17. September 2009, 11:27

Danke für die Antworten.

Ich fände es sehr unübersichtlich mit 7 Kommandozeilen-Fenstern.
die 7 Fenster sind kein Problem, ich hatte schon auch mehr als 10 :)
Prinzipiell aber dürfte schwierig, sehr schwierig sein bei parallel laufenden Prozessen eine sinnvolle Fortschrittsanzeige zu machen. Erst mit gelegentlichen 'joins', weißt Du überhaupt, wo Deine Simulation gerade ist.
Das einzige was die Simulation an Python schicken soll ist der Status (Rückgabewert) am Ende. Das ist das einzige was ich eigentlich brauche. Dann weiss Python die Simulation ist zu Ende und er kann nächste starten. Ich muss auch nicht die Simulationen in einzelnen Fenster haben, aber ich wollte Überblick haben wie die laufen und wie weit ist die Rechnung gekommen, aber wie gesagt wenn es zu viel Aufwand ist sowas zu programmieren, dann verzichte ich drauf. Ich wollte von Profis wissen ob überhaupt so etwas machbar ist und wieviel Aufwand dahinter steckt.
Mir fällt auch als Erstes multiprocessing ein. Aber damit verteilst Du 1 Simulation auf x-Prozesse.
Muss die Applikation selbst (in meinem Fall der Solver) auch multiprocessing unterstützen, um es verwenden zu können oder reicht's wenn Python es unterstützt? oder verwechsle ich mir das mit multithreading...


danke.
Antworten