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



我想通过按下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来完成这项工作。

提前感谢!

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

fcn的异步评估不会阻止MATLAB(来自doc parfeval(

使用parfeval时,您的主要MATLAB实例不会被阻止,从而允许GUI执行代码。像spmdparfor这样的同步接口不适合您的情况。当工作人员忙碌时,您的主实例被阻止,无法执行任何代码。

相关(同样的问题要求parfor(:https://mathworks.com/matlabcentral/answers/401838-how-to-halt-parfor-execution-from-a-ui

相关内容

  • 没有找到相关文章