Matlab-Prozesse aus Matlab erkennen

8

Gibt es eine Möglichkeit zu erkennen, wie viele Matlab-Prozesse auf einem Computer innerhalb eines Matlab-Programms ausgeführt werden?

Ich möchte genau n Matlab-Prozesse laufen lassen. Wenn ich zu wenige habe, will ich sie erschaffen und wenn ich zu viele habe, möchte ich einige töten. Sie können dies natürlich manuell tun, aber ich würde es lieber automatisch haben, wenn es möglich und nicht zu kompliziert zu implementieren ist.

Zusatzinfo: Momentan benutze ich Windowsx64 (vista), aber ich bin auch an anderen Plattformen interessiert.

    
AnnaR 13.05.2009, 14:30
quelle

6 Antworten

11

Wenn Sie Windows verwenden, können Sie Folgendes tun:

%Vor%     
Edric 13.05.2009, 16:17
quelle
5

Hier ist ein anderer Ansatz: Sie könnten Matlabs COM "Automation Server" verwenden, um Mitarbeiter zu starten und sie von einem zentralen Matlab-Prozess aus zu steuern.

%Vor%

Dann können Sie Execute () verwenden, damit sie funktionieren. Sie könnten einen Timer-Trick verwenden, um eine Art asynchrone Ausführung zu erhalten.

%Vor%

Dann

%Vor%

Leider stecken Sie in den Arbeitern mit Single-Threading fest. Wenn Sie also erneut evalasync () aufrufen, um die Ergebnisse zu überprüfen, wird sie blockiert. Sie möchten also deren Fortschritt durch Dateien auf der Festplatte überwachen. Es ist also vielleicht kein großer Gewinn.

    
Andrew Janke 14.05.2009 15:38
quelle
3

unter Linux

%Vor%

würde den Trick machen (Pfad selbst ersetzen und 1 für den Grep-Prozess subtrahieren)

(oder um eine Funktion zu erstellen, verwenden Sie

%Vor%

können Sie auch

verwenden %Vor%

um herauszufinden, welche Systemarchitektur (win / linux / etc) ein Programm gerade auf

ausführt     
second 13.05.2009 14:37
quelle
2

Im Hinblick auf die Erkennung, wie viele MATLAB-Prozesse derzeit auf Ihrem Computer ausgeführt werden, würde ich wahrscheinlich mit die Antwort, die Edric gab . Von dort müssen Sie entweder einige stoppen oder neue beginnen. Hier ist ein Code (mit der Edrics-Methode), der die Anzahl der MATLAB-Prozesse erkennt, neue öffnet und sofort Code in ihnen ausführt. Ich schaue immer noch in den prozesstötenden Teil ...

%Vor%

Angenommen, Sie haben einen Prozess ausgeführt, um zu starten, wird dieser Code 2 weitere starten und dann die Steuerung an den ursprünglichen MATLAB-Prozess zurückgeben (aufgrund der "& amp;" in dem Aufruf der DOS Funktion). Wenn es gestartet wird, ruft es automatisch die eingebaute MATLAB-Funktion WHY auf (aufgrund des "-r why" im Aufruf von DOS), was dazu führt, dass der folgende Text in jedem neuen Fenster erscheint:

Der kahle und nicht übermäßig kahle und nicht übermäßig schlaue Hamster gehorchte einem verängstigten und nicht übermäßig verängstigten Hamster.

Indem Sie "why" im Aufruf von DOS mit der gewünschten code / m-Datei ersetzen, können Sie neue Prozesse erzeugen, die sofort Zahlen verarbeiten.

Verwenden der Parallel Computing Toolbox:

(Dies ist eine alte Version meiner Antwort Ich verlasse hier, falls jemand es hilfreich findet)

Wenn Sie die Parallel Computing Toolbox verwenden, um einen Pool von MATLAB-Arbeitern zu erstellen, sollten Sie sich die MATLABPOOL Funktion. Hier sind einige Möglichkeiten, es zu benutzen:

%Vor%     
gnovice 13.05.2009 16:37
quelle
1

Mit Windows 'TASKLIST können Sie auch die PID einer bestimmten laufenden Aufgabe erhalten, indem Sie den Fenstertitel als Filter verwenden. Dies ist besonders hilfreich, wenn Sie mehrere Matlab-Prozesse ausführen, von denen Sie den Titel geändert haben.

Das Ändern des Matlab-Hauptfenstertitels erfolgt mit der folgenden Funktion (changeWindowTitle.m):

%Vor%

Wenn Sie den Titel des Matlab-Fensters mit "..." in "MyMatlabWindow" geändert haben.

%Vor%

... Sie können die Sitzungs-PID dieses Matlabs von außerhalb von Matlab mit folgendem Befehl finden:

%Vor%

Natürlich können Sie dasselbe auch innerhalb von Matlab tun, indem Sie dos() system() oder das Ausrufezeichen verwenden.

Zusätzlich können Sie die Argumente /FO CSV (um die Ausgabe als CSV zu formatieren) und /NH (um die Ausgabe des Headers zu unterdrücken) hinzufügen.

%Vor%

Quellen:

jumanne 15.12.2010 14:20
quelle
0

Möchten Sie ein VBScript schreiben? Sie können dies mithilfe von WMI , einer Windows-Verwaltungs-API mit Scripting-Bindungen, scripten. WMI kann alle Prozesse auf einer Maschine auflisten, einschließlich Bildname, Pfad und Befehlszeile. Suchen Sie nach den MATLAB.exes. Das Win32_Process-Objekt von WMI macht auch die meisten Informationen verfügbar, die Process Explorer anzeigt, wie Startzeit, CPU, und Speichernutzung.

Sie können fast WMI innerhalb von Matlab selbst mit actxserver () - und COM-Methoden aufrufen, aber die Sammlungen funktionieren noch nicht richtig. Aber Sie können ein einfaches VBS schreiben, um die WMI-Prozesslistenabfrage durchzuführen und Matlab-freundliche Ausgaben zu schreiben, und dann darauf zugreifen. Dies ist etwas mehr Arbeit als Tasklist, aber Sie können die zusätzlichen Informationen nützlich finden, wenn Sie eine Reihe von Worker-Prozessen streiten. Zum Beispiel könnten die Befehlszeilen, Fenstertitel oder Prozessstartzeiten verwendet werden, um Arbeiter zu unterscheiden, wenn entschieden wird, was zu töten ist.

Um sie zu beenden, können Sie Win32_Process.Terminate von WMI verwenden oder den Befehl taskkill verwenden.

Dies ist alles nur Windows. Wenn Sie Dinge portierbar machen wollen, können Sie Cygwin installieren und dann die Unix-Stil-Befehle ps und kill auf beiden Betriebssystemen verwenden.

Randnotiz: Wenn Sie reguläre Windows Matlab-Apps als Worker mit "-r" verwenden, verwenden Sie try / catch auf der obersten Ebene Ihres Hauptscripts, um sicherzustellen, dass es beendet wird, wenn Sie fertig sind:

%Vor%

Andernfalls kann ein Fehler, der in M-Code ausgelöst wird, bis zur obersten Ebene aufsteigen und Matlab in den Haupt-GUI-Loop fallen lassen, wo er auf Benutzereingaben wartet, und er sieht aus wie ein aufgehängter Arbeiter.

Oh, und wenn du Matlab-Prozesse von Matlab tötest, willst du wahrscheinlich vermeiden, dich selbst zu töten. Hier ist eine MEX-Funktion, mit der Sie Ihre eigene PID unter Windows64 oder Unix bestimmen können; überprüfen Sie es bei der Auswahl der Opfer gegen die PIDs der Zielprozesse. Züchter ifdefs wird es auf win32 arbeiten lassen.

%Vor%     
Andrew Janke 14.05.2009 04:58
quelle

Tags und Links