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
是否可以使 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