2013-05-20 11 views
5

Ein Kollege hat eine MATLAB startup.m Datei, die interaktiven Code enthält (ruft den Befehl questdlg auf, um ihn zu fragen, in welchem ​​Projektverzeichnis er arbeiten möchte).Ermitteln, ob MATLAB startup.m auf einem Worker ausgeführt wird

Dies funktioniert gut für ihn, wenn MATLAB direkt ausgeführt wird. Er muss jedoch auch den MATLAB-Code parallel ausführen, nachdem er eine matlabpool gestartet hat.

Beim Anfahren, die Arbeiter in den matlabpool laufen seine startup.m Datei, immer an die questdlg und dann hängen (unendlich oder bis Ctrl C).

Eine einfache Lösung ist, nur den interaktiven Code von seinem startup.m loszuwerden, da es nicht wirklich wesentlich ist.

Aber ist es eine Möglichkeit zu erkennen, ob diese startup.m wird von einem Arbeiter Anfahren ausgeführt werden - etwas ähnliches wie isdeployed oder ismcc? Dann könnte er den interaktiven Code, den er für nützlich hält, behalten, aber nur ausführen, wenn er keinen Arbeiter startet.

Der Befehl getCurrentWorker schien wie es sein könnte, was benötigt wurde, aber ich glaube, dass funktioniert nur während der Ausführung einer Aufgabe, anstatt beim Start.

Antwort

2

Sie könnten die usejava Funktion verwenden, um zu sehen, ob der interaktive Desktop ausgeführt wird. Dies ist wahrscheinlich eine ausreichend gute Näherung, es sei denn, Sie verwenden häufig -nodesktop.

if usejava('desktop') 
    questdlg(...); 
end 
+0

Danke @Edric. Persönlich würde mir etwas undokumentiertes in Ordnung sein, wenn es die "richtige" Art und Weise wäre, es zu tun - aber etwas dokumentiert, das im Grunde funktioniert, ist auch hier in Ordnung. Klingt wie 'usejava' funktioniert - danke! –

0

Werfen Sie einen Blick auf labindex und, falls das nicht funktioniert, labSend und labReceive.

+0

Sie leider nichts wird dies sagen, wie sie aufgebaut sind (oder nicht) viel später als 'startup.m' – Edric

+0

@JoshuaBarr Entschuldigung, ich hätte erwähnen sollen, dass ich auch' labindex' versucht habe, was aus dem Grund nicht funktioniert, den @Edric erwähnt. @Edric, hast du irgendwelche Vorschläge? –

+0

@SamRoberts - Ja, es gibt Mittel und Wege, wie du sicher weißt - es ist eine Frage, wie undokumentiert du gehen möchtest. Ich werde eine Antwort schreiben, die helfen sollte. – Edric

0

Zumindest für meine R2014b,

isempty(getCurrentWorker) 

scheinen die Arbeit zu tun:

>> getCurrentWorker 
ans = 
    [] 
>> parfor i=1:2;disp(getCurrentWorker);end 
Worker 
       Host: IMP.OIMRDS 
     ComputerType: WIN64 

      ProcessId: 15784 
Worker 
       Host: IMP.OIMRDS 
     ComputerType: WIN64 

      ProcessId: 17220 
Verwandte Themen