fetchNext

Получение следующих доступных непрочитанных выходов FevalFuture

Синтаксис

[idx,B1,B2,...,Bn] = fetchNext(F)
[idx,B1,B2,...,Bn] = fetchNext(F,TIMEOUT)

Описание

[idx,B1,B2,...,Bn] = fetchNext(F) ждет непрочитанного FevalFuture в массиве фьючерсов F чтобы закончить, а затем вернёт линейный индекс этого будущего в массиве F как idx, наряду с результатами будущего в B1,B2,...,Bn. Перед этим вызовом 'Read' свойство конкретного будущего false; после этого это true.

[idx,B1,B2,...,Bn] = fetchNext(F,TIMEOUT) ждет не дольше TIMEOUT секунд, чтобы результат стал доступным. Если тайм-аут истекает до того, как какой-либо результат станет доступен, все выходные аргументы будут пустыми.

Если фьючерсов нет F чьи 'Read' свойство false, после чего выводится сообщение об ошибке. Можно проверить, есть ли непрочитанные фьючерсы с помощью anyUnread = ~all([F.Read]).

Если элемент F которая была завершена, столкнулась с ошибкой во время выполнения, эта ошибка будет выдана fetchNext. Однако это будущее 'Read' свойство установлено true, чтобы любые последующие вызовы fetchNext может продолжить.

Примеры

Запросите несколько вычислений функции и обновите индикатор прогресса в ожидании завершения.

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)

Совет

fetchNext функция возвращает линейный индекс будущего из своего массива. Если вместо этого вам нужны значения индекса многомерного массива, можно использовать ind2sub функция для преобразования значений.

Введенный в R2013b