Matlab:关闭并行池 - 仅适用于 parfeval() 但不适用于 spmd
Matlab: Shut down parallel pool - only working for parfeval() but not 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 来完成。
提前致谢!
对于您的用例,并行任务的异步执行至关重要。
The asynchronous evaluation of fcn does not block MATLAB (from doc parfeval
)
使用 parfeval
时,您的主要 MATLAB 实例未被阻止,允许 GUI 执行代码。 spmd
或 parfor
等同步接口不适合您的情况。当工作人员忙碌时,您的主实例被阻塞并且无法执行任何代码。
相关(同样的问题要求 parfor
):https://mathworks.com/matlabcentral/answers/401838-how-to-halt-parfor-execution-from-a-ui
我想通过在 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 来完成。
提前致谢!
对于您的用例,并行任务的异步执行至关重要。
The asynchronous evaluation of fcn does not block MATLAB (from
doc parfeval
)
使用 parfeval
时,您的主要 MATLAB 实例未被阻止,允许 GUI 执行代码。 spmd
或 parfor
等同步接口不适合您的情况。当工作人员忙碌时,您的主实例被阻塞并且无法执行任何代码。
相关(同样的问题要求 parfor
):https://mathworks.com/matlabcentral/answers/401838-how-to-halt-parfor-execution-from-a-ui