accumulate values in aftereach function

4 visualizaciones (últimos 30 días)
dleal
dleal el 19 de Abr. de 2022
Comentada: dleal el 20 de Abr. de 2022
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 Asynchronous Parallel Programming en Help Center y File Exchange.

Productos


Versión

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by