5

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

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

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

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

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

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

4

3 回答 3

2

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

if usejava('desktop')
    questdlg(...);
end
于 2013-05-21T06:28:37.157 回答
0

看一下labindexand,失败了,labSendand labReceive

于 2013-05-20T20:35:16.107 回答
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
于 2015-03-09T19:47:52.847 回答