Получение следующих доступных непрочитанных выходных данных 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 для преобразования значений.
fetchOutputs | isequal | parfeval | parfevalOnAll | parpool