accumulate values in aftereach function

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

 Respuesta aceptada

Raymond Norris
Raymond Norris el 19 de Abr. de 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

1 comentario

dleal
dleal el 20 de Abr. de 2022
Hi Raymond, thanks for your answer. This is exactly what I needed.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Background Processing en Centro de ayuda y File Exchange.

Productos

Versión

R2022a

Preguntada:

el 19 de Abr. de 2022

Comentada:

el 20 de Abr. de 2022

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by