accumulate values in aftereach function
4 views (last 30 days)
Show older comments
Hi all,
I would like to accumulate values that I collect in real time from a function that runs in the background.
For example
q = parallel.pool.DataQueue;
f1 = AfterEach(q, @afterFunc);
fut1 = parfeval(@genData, 0, q1)
function genData(q1)
while true
send(q1, randn)
end
end
Ideally I would be able to accumulate using persistent variable, but I understand persistant variables cannot be used in cunjunction with parfeval:
function afterfunc(x)
persistent y;
if isempty(y); y = []; end;
y = [ y, x];
plot(y); % for example
end
I know I could accumulate the values in the genData(q1) function, but then, after a few thousand iteration, I would be sending a very large vector and it would take longer (then desired) to send
0 Comments
Accepted Answer
Raymond Norris
on 19 Apr 2022
Persistent variables should work. Try the following
q = parallel.pool.DataQueue;
q.afterEach(@afterFunc);
f = parfeval(@genData, 0, q);
function genData(q)
while true
send(q, randn)
pause(1)
end
end
function afterFunc(x)
persistent y
if isempty(y)
y = [];
end
y = [y, x];
plot(y)
end
More Answers (0)
See Also
Categories
Find more on Asynchronous Parallel Programming 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!