首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab:关闭仅用于parfeval()而不是spmd的并行池

Matlab:关闭仅用于parfeval()而不是spmd的并行池
EN

Stack Overflow用户
提问于 2020-04-09 09:13:19
回答 1查看 421关注 0票数 1

我想通过在Matlab中按一个按钮关闭我的并行池,以停止在这些池工作人员上运行的函数的执行。

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

由于我更喜欢使用"spmd“而不是"parfeval”来建立工人之间的通信,所以我尝试了同样的方法,但是失败了。

在按下按钮时什么都没有发生,当我用ctrl+c取消整个脚本时,并行池才会关闭。

希望有人能帮我解决这个问题。

工作:

代码语言:javascript
复制
function StartButtonPushed2(app,event)
    pool = gcp();
    parfeval(pool, @dosomething, 0, app);
end

不工作:

代码语言:javascript
复制
function StartButtonPushed1(app,event)
    pool = gcp();
    spmd 
        dosomething(app);
    end
end

代码语言:javascript
复制
function StopButtonPushed(app,event)
    delete(gcp); %shutdown pool
end

目标:

我的最终目标是,使用“开始”按钮并行启动不同的函数。

这些功能可以从SPS、OPC UA服务器和不同的传感器收集数据,并将收集到的数据连续写入SQL数据库。

为了将数据写入DB,我考虑使用另一个并行函数--我们称之为"writeDB“--它接收数据收集函数中的大块数据,并将其上传。

停止按钮应该通过中断所有功能来结束数据收集--目前我正在通过删除parpool来完成这个任务。

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-09 11:16:19

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

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61117711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档