一位同事有一个MATLAB startup.m
文件,其中包含交互式代码(它调用命令questdlg
询问他希望在哪个项目目录中工作)。
直接运行MATLAB时,这对他来说很好。但是,他还需要并行运行MATLAB代码,并启动matlabpool
。
启动时,matlabpool
中的工作人员正在运行他的startup.m
文件,转到questdlg
然后挂起(无限期,或直到 Ctrl C )。
一个简单的解决方案是从他的startup.m
中删除交互式代码,因为它不是真正必要的。
但有没有办法检测这个startup.m
是否由工作人员启动 - 类似于isdeployed
或ismcc
?然后,他可以保留他认为有用的交互式代码,但只在不启动工作人员时执行它。
命令getCurrentWorker
似乎可能是需要的,但我相信只有在执行任务时才有效,而不是在启动时。
答案 0 :(得分:2)
您可以使用usejava
函数查看交互式桌面是否正在运行,这可能是一个足够好的近似值,除非您经常使用-nodesktop
模式。
if usejava('desktop')
questdlg(...);
end
答案 1 :(得分:0)
请查看labindex
,如果失败,labSend
和labReceive
。
答案 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