Matlab中COM实例的并行执行

Matlab中COM实例的并行执行,matlab,matlabpool,Matlab,Matlabpool,我正试图通过使用Mathworks的ParralelToolbox来加速我们的测试环境。但是,我无法并行启动多个Matlab实例(到目前为止,我们按顺序运行测试,每个测试都通过ActX服务器启动一个新的Matlab实例)。 所以当我运行下面的代码时 ML=ver('Matlab'); ML_Path=matlabroot; ML_Ver=ML.Version; parfor i = 1:3 NewMatlab = actxserver(['matlab.application.singl

我正试图通过使用Mathworks的ParralelToolbox来加速我们的测试环境。但是,我无法并行启动多个Matlab实例(到目前为止,我们按顺序运行测试,每个测试都通过ActX服务器启动一个新的Matlab实例)。 所以当我运行下面的代码时

ML=ver('Matlab');
ML_Path=matlabroot;
ML_Ver=ML.Version;
parfor i = 1:3
    NewMatlab = actxserver(['matlab.application.single.',ML_Ver])
    Answer = NewMatlab.Feval('test',1);
    NewMatlab.Quit;
    NewMatlab.release;
end
Matlab实例是按顺序调用的(test只是一个非常简单的脚本,它总结了几个数字)

但是如果我通过命令行启动一个新的Matlab

ML=ver('Matlab');
ML_Path=matlabroot;
ML_Ver=ML.Version;
parfor i = 1:3
    dos('matlab -nodesktop -minimize -wait -batch "test"');
end

它起作用了。我发现这两种方法在启动Matlab的处理上有很大的不同,但是第一种方法是

如果您想让
测试的每次迭代都在一个完全独立的Matlab实例中运行,您可以使用该函数,如下所示:

for i = 1:3
    j(i) = batch(@test, nOut, {argsIn...});
end
% Later, collect results
for i = 1:3
    wait(j(i)), fetchOutputs(j(i))
end
或者,您可以直接使用
parfor

parpool() % If necessary
parfor i = 1:3
    out{i} = test(...)
end

(如果当前没有打开池,您只需要调用
parpool
,并且您设置了首选项,以便在点击
parfor
时不会自动创建池)。

好的,我们打算做的是并行执行Simulink测试。目前,我们通过ActiveX为每个测试启动一个新的Matlab实例,并按顺序运行测试。背景是,如果一个测试导致Matlab崩溃(是的,这种情况经常发生…),我们仍然可以测试其他模型
parfor
对所有迭代使用相同的工作空间;这不会起作用,因为每个测试都有自己的环境,
batch
可能会起作用,但它不能解决我们通过单独的Matlab实例避免的稳定性问题…
batch
对每个任务使用单独的Matlab工作进程。