检测MATLAB startup.m是否在worker上运行

时间:2013-05-20 14:58:37

标签: parallel-processing matlab

一位同事有一个MATLAB startup.m文件,其中包含交互式代码(它调用命令questdlg询问他希望在哪个项目目录中工作)。

直接运行MATLAB时,这对他来说很好。但是,他还需要并行运行MATLAB代码,并启动matlabpool

启动时,matlabpool中的工作人员正在运行他的startup.m文件,转到questdlg然后挂起(无限期,或直到 Ctrl C )。

一个简单的解决方案是从他的startup.m中删除交互式代码,因为它不是真正必要的。

但有没有办法检测这个startup.m是否由工作人员启动 - 类似于isdeployedismcc?然后,他可以保留他认为有用的交互式代码,但只在不启动工作人员时执行它。

命令getCurrentWorker似乎可能是需要的,但我相信只有在执行任务时才有效,而不是在启动时。

3 个答案:

答案 0 :(得分:2)

您可以使用usejava函数查看交互式桌面是否正在运行,这可能是一个足够好的近似值,除非您经常使用-nodesktop模式。

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

答案 1 :(得分:0)

请查看labindex,如果失败,labSendlabReceive

答案 2 :(得分:0)

至少对于我的R2014b,

   isempty(getCurrentWorker)

似乎可以胜任这项工作:

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