Duplicate instances of methods executed while using parfeval and backgroundpool
I have the following function that sends regular updates
function countUp(q)
%countUp Counts up 1 every second
for i = 1:5
disp(i);
pause(1);
send(q, i);
end
end
The above function is called by the mlapp
properties (Access = private)
q = parallel.pool.DataQueue; % Description
L;
f;
end
methods (Access = private)
function myDisp(app, data)
log = [‘Recvd data update: ‘, num2str(data)];
disp(log);
app.Label.Text = num2str(data);
if(data == 5)
cancel(app.f);
app.StartButton.Enable = true;
end
end
end
% Callbacks that handle component events
methods (Access = private)
% Button pushed function: StartButton
function StartButtonPushed(app, event)
disp(‘Start button clicked’);
app.StartButton.Enable = false;
app.L = afterEach(app.q, @(data) myDisp(app, data));
app.f = parfeval(backgroundPool,@countUp,0,app.q);
disp(‘Start button cb complete’);
end
% Button pushed function: StopButton
function StopButtonPushed(app, event)
delete(app.L);
cancel(app.f);
app.StartButton.Enable = true;
end
First run returns
Start button clicked
Start button cb complete
Recvd data update: 1
Recvd data update: 2
Recvd data update: 3
Recvd data update: 4
Recvd data update: 5
Each time I start it it looks like duplicate instances of the function is executed
Start button clicked
Start button cb complete
Recvd data update: 1
Recvd data update: 1
Recvd data update: 2
Recvd data update: 2
Recvd data update: 3
Recvd data update: 3
Recvd data update: 4
Recvd data update: 4
Recvd data update: 5
Recvd data update: 5
It never looks like cancel(Future) is working as intended. What am I doing wrong?I have the following function that sends regular updates
function countUp(q)
%countUp Counts up 1 every second
for i = 1:5
disp(i);
pause(1);
send(q, i);
end
end
The above function is called by the mlapp
properties (Access = private)
q = parallel.pool.DataQueue; % Description
L;
f;
end
methods (Access = private)
function myDisp(app, data)
log = [‘Recvd data update: ‘, num2str(data)];
disp(log);
app.Label.Text = num2str(data);
if(data == 5)
cancel(app.f);
app.StartButton.Enable = true;
end
end
end
% Callbacks that handle component events
methods (Access = private)
% Button pushed function: StartButton
function StartButtonPushed(app, event)
disp(‘Start button clicked’);
app.StartButton.Enable = false;
app.L = afterEach(app.q, @(data) myDisp(app, data));
app.f = parfeval(backgroundPool,@countUp,0,app.q);
disp(‘Start button cb complete’);
end
% Button pushed function: StopButton
function StopButtonPushed(app, event)
delete(app.L);
cancel(app.f);
app.StartButton.Enable = true;
end
First run returns
Start button clicked
Start button cb complete
Recvd data update: 1
Recvd data update: 2
Recvd data update: 3
Recvd data update: 4
Recvd data update: 5
Each time I start it it looks like duplicate instances of the function is executed
Start button clicked
Start button cb complete
Recvd data update: 1
Recvd data update: 1
Recvd data update: 2
Recvd data update: 2
Recvd data update: 3
Recvd data update: 3
Recvd data update: 4
Recvd data update: 4
Recvd data update: 5
Recvd data update: 5
It never looks like cancel(Future) is working as intended. What am I doing wrong? I have the following function that sends regular updates
function countUp(q)
%countUp Counts up 1 every second
for i = 1:5
disp(i);
pause(1);
send(q, i);
end
end
The above function is called by the mlapp
properties (Access = private)
q = parallel.pool.DataQueue; % Description
L;
f;
end
methods (Access = private)
function myDisp(app, data)
log = [‘Recvd data update: ‘, num2str(data)];
disp(log);
app.Label.Text = num2str(data);
if(data == 5)
cancel(app.f);
app.StartButton.Enable = true;
end
end
end
% Callbacks that handle component events
methods (Access = private)
% Button pushed function: StartButton
function StartButtonPushed(app, event)
disp(‘Start button clicked’);
app.StartButton.Enable = false;
app.L = afterEach(app.q, @(data) myDisp(app, data));
app.f = parfeval(backgroundPool,@countUp,0,app.q);
disp(‘Start button cb complete’);
end
% Button pushed function: StopButton
function StopButtonPushed(app, event)
delete(app.L);
cancel(app.f);
app.StartButton.Enable = true;
end
First run returns
Start button clicked
Start button cb complete
Recvd data update: 1
Recvd data update: 2
Recvd data update: 3
Recvd data update: 4
Recvd data update: 5
Each time I start it it looks like duplicate instances of the function is executed
Start button clicked
Start button cb complete
Recvd data update: 1
Recvd data update: 1
Recvd data update: 2
Recvd data update: 2
Recvd data update: 3
Recvd data update: 3
Recvd data update: 4
Recvd data update: 4
Recvd data update: 5
Recvd data update: 5
It never looks like cancel(Future) is working as intended. What am I doing wrong? parfeval, backgroundpool MATLAB Answers — New Questions