Main Content

fetchNext

Future 配列から次の未読の出力を取得

    説明

    [idx,Y1,...,Ym] = fetchNext(F) は、配列 F 内の終了済みで未読の次の Future オブジェクトの線形インデックス idx を取得し、その Future からの m 個の結果を Y1,...,Ym として取得します。

    fetchNext は、parfeval を使用して作成した Future オブジェクトでのみ使用できます。

    • Future が未読となるのは、その Read プロパティが false の場合です。F に未読の要素がない場合、MATLAB® はエラーをスローします。

    • Future が終了済みとなるのは、その State プロパティが 'finished' の場合です。'finished' 状態である未読の要素がない場合、MATLAB はまず F の要素が終了するまで待機します。

    fetchNext は、F から完了順に要素を読み取ります。fetchNext が配列 F 内の次の未読の Future オブジェクトからの出力を取得すると、MATLAB はその FutureRead プロパティを true に設定します。

    関数 fetchNext は、F からの要素の読み取りでエラーが発生した場合、まず Future の要素の Read プロパティを true に設定します。その後、fetchNext はエラーをスローします。

    [idx,Y1,...,Ym] = fetchNext(F,timeout) は、F の結果が利用できるようになるまで最大 timeout 秒待機します。

    timeout 秒経過した後に Future 配列 F に未読の要素がない場合、idx と他のすべての出力引数が空になります。

    すべて折りたたむ

    満足できる結果が見つかるまで関数を複数回実行します。この例では、結果が 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

    複数の関数評価を要求し、完了するまで待機している間、進行状況バーを更新します。

    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)

    入力引数

    すべて折りたたむ

    入力 Future オブジェクト。parallel.FevalFuture スカラーまたは配列として指定します。

    fetchNext は、parfeval を使用して作成した Future オブジェクトでのみ使用できます。

    例: F = parfeval(backgroundPool,@magic,1,3);

    待機する秒数。実数の数値スカラーとして指定します。

    例: timeout = 5;

    例: timeout = single(3.14);

    出力引数

    すべて折りたたむ

    Future 配列のインデックス。整数のスカラーとして返されます。

    future からの出力引数。出力のタイプは、インデックス idxF の要素に関連付けられている関数によって決まります。

    インデックス idxF の要素は、m 個の出力引数を返さなければなりません。Future の出力引数の数を確認するには、NumOutputArguments プロパティを使用します。