2013-05-20 7 views
5

Kolega ma plik MATLAB startup.m zawierający kod interaktywny (wywołuje polecenie questdlg, aby zapytać go, w którym katalogu projektu chce pracować).Wykryj, czy uruchomiono MATLAB startup.m na robotniku.

Działa to dobrze podczas bezpośredniego uruchamiania programu MATLAB. Jednak musi również równolegle uruchamiać kod MATLAB, uruchamiając matlabpool.

Podczas uruchamiania, robotnicy w matlabpool działają swój plik startup.m, dotarcie do questdlg a następnie wiszące (nieskończenie, aż Ctrl C).

Łatwym rozwiązaniem jest po prostu pozbyć się interaktywnego kodu z jego startup.m, ponieważ nie jest to naprawdę konieczne.

Ale czy istnieje sposób na sprawdzenie, czy ten startup.m jest uruchamiany przez pracownika uruchamiającego - coś podobnego do isdeployed lub ismcc? Następnie może zachować kod interaktywny, który uzna za przydatny, ale tylko wykonać go, gdy nie uruchamia się pracownika.

Wydawało się, że polecenie getCurrentWorker może być potrzebne, ale uważam, że działa tylko podczas wykonywania zadania, a nie podczas uruchamiania.

Odpowiedz

2

Możesz użyć funkcji usejava, aby sprawdzić, czy interaktywny pulpit działa, co jest prawdopodobnie wystarczająco dobrym przybliżeniem, chyba że często korzystasz z trybu -nodesktop.

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

Dzięki @Edric. Osobiście byłoby dobrze z czymś nieudokumentowanym, gdyby to był "właściwy" sposób na zrobienie tego - ale coś udokumentowanego, co w zasadzie działa, również jest w porządku. Brzmi jak "usejava" zadziała - dzięki! –

0

Spójrz na labindex i, w przypadku braku, labSend i labReceive.

+0

Niestety Dzięki temu dowiesz się nic jak te tworzone są (lub nie), znacznie później niż 'startup.m' – Edric

+0

@JoshuaBarr Przepraszam, powinienem był wspomnieć, że również wypróbowałem' labindex', który nie działa z powodu wzmianek @Edric. @Edric, czy masz jakieś sugestie? –

+0

@SamRoberts - tak, są sposoby i środki, jak jestem pewien, że zdajesz sobie sprawę - chodzi o to, jak nieudokumentowane chcesz jechać. Napiszę odpowiedź, która powinna pomóc. – Edric

0

Przynajmniej dla mojego R2014b,

isempty(getCurrentWorker) 

wydają się wykonać zadanie:

>> 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