MATLAB PollableDataQueue 获取最后一个值

MATLAB PollableDataQueue get last value

是否可以使 MATLAB PollableDataQueue 后进先出 (LIFO) 而不是先进先出 (FIFO)?或者,有没有办法获取队列中的最后一个条目而不是第一个条目?

例如,请参见以下说明 PollableDataQueue 当前行为的代码:

%parpool;

q = parallel.pool.PollableDataQueue;

f = parfeval(@test,1,q);

for jj = 1:4
    poll(q)
    pause(0.25)
end

fetchOutputs(f)
function x0 = test(q)

    x0 = [];
    for jj = 1:20
        x0 = [x0, rand(1)];
        send(q, x0);
        pause(0.01);
        
    end

end

ans =

     []


ans =

    0.7918


ans =

    0.7918    0.1528


ans =

    0.7918    0.1528    0.0854


ans =

  Columns 1 through 12

    0.7918    0.1528    0.0854    0.9955    0.3557    0.1679    0.6713    0.5398    0.6599    0.9344    0.7200    0.4450

  Columns 13 through 20

    0.6622    0.4427    0.9791    0.5114    0.0200    0.6054    0.0479    0.3470

调用“poll(q)”returns 将值按照它们添加到队列 (FIFO) 的顺序一个接一个地添加到 x0。相反,我想在调用 poll(q) 的那一刻检索队列中的最后一个值。

例如,由于下面的代码在连续调用“poll(q)”之间等待 0.25 秒,并且每 0.01 秒将值添加到 x0,我怀疑到第二次“poll(q)” " 被调用时,x0 的第 25 个值应该已经被记录了。然而,我第二次调用“poll(q)”时,我只得到第一个条目(先进先出而不是后进先出)。

您可以在 for 循环中使用 while 循环来清空队列:

for jj = 1:4
  while q.QueueLength > 0
    x0 = poll(q);
  end
  x0
  pause(0.25)
end