目录
fetchNext函数的功能是检索 Future 数组中的下一个未读输出。
语法
[idx,Y1,...,Ym] = fetchNext(F)
[idx,Y1,...,Ym] = fetchNext(F,timeout)
说明
[idx, Y1, ..., Ym] = fetchNext(F) 从数组 F 中检索下一个已完成且未读的 FevalFuture 对象的线性索引 idx,以及该 Future 的 m 个结果,分别为 Y1 到 Ym。
只能在使用 parfeval 创建的 FevalFuture 对象上使用 fetchNext。
如果 FevalFuture 的 Read 属性为 false,则表示该 FevalFuture 未读。如果 F 中没有未读元素,MATLAB 将引发错误。
如果 FevalFuture 的 State 属性为 'finished',则表示该 FevalFuture 已完成。如果没有未读元素处于 'finished' 状态,MATLAB 首先等待 F 中的某个元素完成。
fetchNext 按完成顺序从 F 中读取元素。在 fetchNext 从数组 F 中检索到下一个未读的 FevalFuture 对象的输出后,MATLAB 将该 FevalFuture 的 Read 属性设置为 true。
如果 fetchNext 读取的来自 F 的元素遇到错误,函数首先将 Future 元素的 Read 属性设置为 true,然后引发错误。
[idx, Y1, ..., Ym] = fetchNext(F, timeout) 等待最多 timeout 秒,以等待 F 中的结果变为可用。
如果经过 timeout 秒后,Future 数组 F 中没有未读元素,那么 idx 和所有其他输出参数将为空。
示例
取消一组 Future 对象
多次运行一个函数,直到找到满意的结果为止。在这种情况下,当结果大于0.95时,将取消 Future 数组 f。
N = 100;
for idx = N:-1:1
F(idx) = parfeval(backgroundPool,@rand,1); % Create a random scalar
end
result = NaN; % No result yet
for idx = 1:N
[~, thisResult] = fetchNext(F);
if thisResult > 0.95
result = thisResult;
% Have all the results needed, so break
break;
end
end
% With required result, cancel any remaining futures
cancel(F)
result
使用 fetchNext 更新进度条
请求多个函数评估,并在等待完成时更新进度条。
N = 100;
for idx = N:-1:1
% Compute the rank of N magic squares
F(idx) = parfeval(backgroundPool,@rank,1,magic(idx));
end
% Build a waitbar to track progress
h = waitbar(0,'Waiting for FevalFutures to complete...');
results = zeros(1,N);
for idx = 1:N
[completedIdx,thisResult] = fetchNext(F);
% Store the result
results(completedIdx) = thisResult;
% Update waitbar
waitbar(idx/N,h,sprintf('Latest result: %d',thisResult));
end
delete(h)
1780

被折叠的 条评论
为什么被折叠?



