gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:12:25 25 4
gpt4 key购买 nike

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

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

import matlab.engine as MAT_E
eng=MAT_E.start_matlab()

test_id=1
isTestDone = eng.runTest1(test_id,nargout=1) # runTest1 is a .m file which needs to be run

test_id=2
isTestDone = eng.runTest2(test_id,nargout=1) # runTest2 is a .m file which needs to be run

test_id=3
isTestDone = eng.runTest3(test_id,nargout=1) # runTest3 is a .m file which needs to be run

有谁知道如何并行执行类似的操作?

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

编辑/添加了 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

最佳答案

start_matlab 函数的 MATLAB 文档 here说:

Each time you call matlab.engine.start_matlab, it starts a new MATLAB process.

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

import matlab.engine as MAT_E
eng1 = MAT_E.start_matlab()
eng2 = MAT_E.start_matlab()
eng3 = MAT_E.start_matlab()

# start running the tests
test1_future = eng1.runTest1(1,nargout=1,background=True)
test2_future = eng2.runTest2(2,nargout=1,background=True)
test3_future = eng3.runTest3(3,nargout=1,background=True)

# get the results of all the tests (waits for tests to finish)
result1 = test1_future.result()
result2 = test2_future.result()
result3 = test3_future.result()

# do something with the results...

如果你有超过 3 个,那么用一个循环来做这件事可能是值得的。

关于python - 使用 python 并行运行 n 个 MATLAB 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61264197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com