Retrieve next available unread FevalFuture outputs
[idx,B1,B2,...,Bn] = fetchNext(F)
[idx,B1,B2,...,Bn] = fetchNext(F,TIMEOUT)
[idx,B1,B2,...,Bn] = fetchNext(F)
waits for an unread
FevalFuture in the array of futures F
to finish, and then returns
the linear index of that future in array F
as
idx
, along with the future’s results in
B1,B2,...,Bn
. Before this call, the 'Read'
property of the particular future is false
; afterward it is
true
.
[idx,B1,B2,...,Bn] = fetchNext(F,TIMEOUT)
waits no longer
than TIMEOUT
seconds for a result to become available. If the
timeout expires before any result becomes available, all output arguments are
empty.
If there are no futures in F
whose 'Read'
property is false
, then an error is reported. You can check
whether there are any unread futures using anyUnread =
~all([F.Read])
.
If the element of F
which has become finished encountered an
error during execution, that error will be thrown by fetchNext
.
However, that future’s 'Read'
property is set
true
, so that any subsequent calls to
fetchNext
can proceed.
Request several function evaluations, and update a progress bar while waiting for completion.
N = 100; for idx = N:-1:1 % Compute the rank of N magic squares F(idx) = parfeval(@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)
The fetchNext
function returns the linear index of the future
from its array. If instead, you need the subscript values of a multidimensional
array, you can use the ind2sub
function to convert the
values.
fetchOutputs
| isequal
| parfeval
| parfevalOnAll
| parpool