Parallel processing 检测MATLAB startup.m是否在辅助进程上运行

Parallel processing 检测MATLAB startup.m是否在辅助进程上运行,parallel-processing,matlab,Parallel Processing,Matlab,同事有一个MATLABstartup.m文件,其中包含交互式代码(它调用命令questdlg,询问他希望在哪个项目目录中工作) 当他直接运行MATLAB时,这对他来说很好。然而,他还需要并行运行MATLAB代码,因为他已经启动了一个matlabpool 启动时,matlabpool中的工作人员正在运行他的startup.m文件,到达questdlg,然后挂起(无限,或直到Ctrl C) 一个简单的解决方案是从他的startup.m中去掉交互式代码,因为它不是真正必要的 但是有没有一种方法可以检测

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

当他直接运行MATLAB时,这对他来说很好。然而,他还需要并行运行MATLAB代码,因为他已经启动了一个
matlabpool

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

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

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


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

看看,如果失败,
labSend
labReceive

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

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

至少对于我的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

不幸的是,这不会告诉你什么,因为这些设置(或不设置)要比
启动晚得多。m
@Joshuabar抱歉,我应该提到我也尝试了
labindex
,但由于@Edric提到的原因,这不起作用@艾德里克,你有什么建议吗?@SamRoberts-是的,我相信你已经意识到,有很多方法和手段-这是一个你想去的无证件的地方的问题。我将发布一个应该有帮助的答案。谢谢@Edric。就我个人而言,如果这是一种“正确”的方式,我会接受一些没有文档记录的东西——但是一些基本上有效的文档记录在这里也可以。听起来像是
usejava
可以工作-谢谢!