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