使用python并行运行n个MATLAB实例

使用python并行运行n个MATLAB实例,python,matlab,Python,Matlab,我想在MATLAB上运行一些测试,通常需要2天,我有3个这样的测试(所以3 x 2=6天)。 因此,我在我的windows机器上运行了三个MATLAB会话,并运行了三个测试(并行),这将我的测试时间从6天减少到了2天 我想在python上做类似的事情来调用三个MATLAB实例。(我可以串行地做,但不能并行地做) 有人知道我怎么能同时做类似的事情吗 如果您有任何问题/建议/意见,请告诉我 编辑/添加了runTest1骨架 function out1 = runTest1(test_id) % s

我想在MATLAB上运行一些测试,通常需要2天,我有3个这样的测试(所以3 x 2=6天)。 因此,我在我的windows机器上运行了三个MATLAB会话,并运行了三个测试(并行),这将我的测试时间从6天减少到了2天

我想在python上做类似的事情来调用三个MATLAB实例。(我可以串行地做,但不能并行地做)

有人知道我怎么能同时做类似的事情吗

如果您有任何问题/建议/意见,请告诉我

编辑/添加了runTest1骨架

function out1 = runTest1(test_id)

% some processing happens and variable 'x' is generated 

if x < 0.1
    % some warning
    warning('the samples are incosistent')
    keyboard;
end

if x > 99
    error('simulation encountered some out of bound values')
end


# some more processing 

end
函数out1=runTest1(测试id)
%发生一些处理并生成变量“x”
如果x<0.1
%一些警告
警告(“样品不一致”)
键盘
结束
如果x>99
错误('模拟遇到一些越界值')
结束
#再加工一些
结束

用于
启动\u MATLAB
函数的MATLAB文档说明:

每次调用matlab.engine.start_matlab时,它都会启动一个新的matlab进程

因此,为每个测试启动一个新的MATLAB过程,并运行它们。我们还从文档中发现,在运行函数时需要使用
background=True
参数,以便Python可以调用所有3个测试,而无需等待它们完成

将matlab.engine作为材料导入
eng1=材料启动matlab()
eng2=材料启动(matlab)
eng3=材料启动(matlab)
#开始运行测试
test1\u future=eng1.runTest1(1,nargout=1,background=True)
test2_future=eng2.runTest2(2,nargout=1,background=True)
test3\u future=eng3.runTest3(3,nargout=1,background=True)
#获取所有测试的结果(等待测试完成)
result1=test1\u future.result()
result2=test2\u future.result()
result3=test3\u future.result()
#对结果做点什么。。。

如果你有3个以上的循环,这可能是值得的。

谢谢Dominic D。。我现在就试试。嗨,多米尼克。。它起作用了。。。谢谢你的意见。。快速提问。函数“runTest1.m”出现了错误/键盘情况(测试函数中有错误和键盘,它们在某些输入上调用),我需要知道这种情况是否发生在python中。。。。我尝试在test1\u future行中使用stdout=out和stderr=err,并尝试获取err.getvalue(),但即使出现错误,它也不会打印。。这就是我遵循的=io.StringIO()err=io.StringIO()test1\u future=eng1.runTest1(1,nargout=1,stdout=out,stderr=err,background=True)我想我有一个捕获错误的解决方案。。。我使用的是test1_future.cancelled(),当出现任何错误时都是如此。。。现在,我试着用键盘捕捉键盘,你的意思是你在捕捉控制台输出吗?(运行函数时,您会在matlab控制台中看到什么)或尝试捕获键盘中断之类的内容?
function out1 = runTest1(test_id)

% some processing happens and variable 'x' is generated 

if x < 0.1
    % some warning
    warning('the samples are incosistent')
    keyboard;
end

if x > 99
    error('simulation encountered some out of bound values')
end


# some more processing 

end