Error when executing MATLAB app methods via parfeval and BackgroundWorker pool.
Show older comments
I try to execute some method from my app asynchronously in the background. The goal is to be able to cancel it if it gets stuck and to execute suitable function-specific failure reaction.
function MainFunc(app)
%modify some local app properties and access external APIs
end
[...]
% Button pushed function: StartExecButton
function StartExecButtonPushed(app, event)
%preparation
FunHandle = parfeval(backgroundPool,@MainFunc,0,app);
pause(3);
if strcmp(FunHandle.State,'running')
cancel(FunHandle);
app.InfoTxt=[app.InfoTxt;{'WatchDog: Main Function took too long and was aborted.'}];
app.TextArea.Value=app.InfoTxt;
else
cancel(FunHandle); %just as a safety measure
if app.MainSuccess
app.InfoTxt=[app.InfoTxt;{'WatchDog: Main Function finished in time with success.'}];
app.TextArea.Value=app.InfoTxt;
else
app.InfoTxt=[app.InfoTxt;{'WatchDog: Main Function finished in time without success.'}];
app.TextArea.Value=app.InfoTxt;
end
end
end
When the function is called via parfeval I observe a failure message "parallel:threadpool:NonConcurrentLibrary / Use of library hg is not supported on a thread-based worker. Use alternatives supported on the background pool."
Does that mean that background pool is generally not useable with MATLAB apps, or am I just using it wrongly?
If usage with apps is not supported, is there any other parallel / concurrent execution framework that can be used with apps?
Accepted Answer
More Answers (1)
Raymond Norris
on 11 Nov 2021
Do you have the Parallel Computing Toolbox? If so, try using a process-based pool (i.e., 'local') instead of a backgroundPool. For instance
p = gcp('nocreate');
if isempty(p)
p = parpool('local',1);
end
FunHandle = parfeval(p,@MainFunc,0,app);
1 Comment
Lionel Pöffel
on 11 Nov 2021
Categories
Find more on Background Processing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!