Получите затем доступный непрочитанный 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