Matlab:关闭并行池-仅适用于parfeval()而不适用于spmd

问题描述 投票:1回答:1

我想通过在Matlab GUI中按下按钮来关闭并行池,以停止执行在这些池工作程序上运行的功能。

不幸的是,这仅在使用“ parfeval()”启动函数时有效。在这种情况下,只要按下按钮,并行池就会关闭,因此用parfeval()调用的函数将停止运行。

[我更喜欢使用“ spmd”,而不是“ parfeval”来建立工作人员之间的通信,所以我尝试了相同的操作,但是失败了。

[按下按钮时什么也没有发生,并且只有在我使用ctrl + c取消整个脚本后,并行池才会关闭。

希望有人可以帮助我解决这个问题。

工作中:

function StartButtonPushed2(app,event)
    pool = gcp();
    parfeval(pool, @dosomething, 0, app);
end

不工作:

function StartButtonPushed1(app,event)
    pool = gcp();
    spmd 
        dosomething(app);
    end
end

function StopButtonPushed(app,event)
    delete(gcp); %shutdown pool
end

目标:

我的最终目标是通过使用开始按钮来并行启动不同的功能。

这些功能应该从SPS,OPC UA服务器和其他传感器收集数据,并将收集的数据连续写入SQL数据库。

[将数据写入数据库时​​,我想到了另一个并行功能-我们称之为“ writeDB”-它正在从数据收集功能接收数据块并上载。

[停止按钮应通过中断所有功能来结束数据收集-目前,我正在通过删除Parpool来完成此操作。

提前感谢!

我想通过在Matlab GUI中按下按钮来关闭并行池,以停止执行在这些池工作程序上运行的功能。不幸的是,这仅在启动...

matlab parallel-processing pool spmd
1个回答
1
投票

对于您的用例,并行执行任务的异步执行至关重要。

© www.soinside.com 2019 - 2024. All rights reserved.