Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

poll

ワーカーから送信されたデータの取得

説明

poll(pollablequeue) は、pollablequeue で指定された parallel.pool.PollableDataQueue にワーカーから送信されたメッセージまたはデータの結果を取得します。データ キューを作成したプロセス内でのみ poll を使用できます。

[data, OK] = poll(pollablequeue, timeout)data を返し、データが返されたことを示す boolean の true として OK を返します。キューにデータがない場合は、空の配列が返され、OK にブール値 false が返されます。オプションの 2 番目のパラメーターとして、timeout を秒単位で指定します。この場合、値を返す前に、timeout で指定された時間だけメソッドがブロックされることがあります。その間に何らかのデータがキューに到達する場合は、そのデータが返されます。

すべて折りたたむ

PollableDataQueue を作成します。

p = parallel.pool.PollableDataQueue;
parfor ループを開始し、値 1 を持つデータなどのメッセージを送信します。
parfor i = 1
    send(p, i); 
end
結果をポーリングします。

poll(p)
1

PollableDataQueue を使用したデータの送信の詳細については、send を参照してください。

この例では、ワーカーからクライアントに中間値を返し、結果をクライアントで表示する方法を説明します。

PollableDataQueue を作成します。PollableDataQueue は、parfeval または parfevalOnAll を使用した非同期の関数評価中に、データの送信やポーリングを行うために最も有用です。

q = parallel.pool.PollableDataQueue;
タイマーを開始し、プール上で parfeval を実行する関数の入力としてデータ キューを送信します。経過時間と返されたデータを表示します。

f = parfeval(@workerFcn, 0, q);
msgsReceived = 0;
starttime = tic;
while msgsReceived < 2
    [data, gotMsg] = poll(q, 1);
    if gotMsg
        fprintf('Got message: %s after %.3g seconds\n', ...
            data, toc(starttime));
        msgsReceived = msgsReceived + 1;
    else
        fprintf('No message available at %.3g seconds\n', ...
            toc(starttime));
    end
end

function workerFcn(q)
    send(q, 'start');
    pause(3);
    send(q, 'stop');
end
Got message: start after 0.39 seconds
No message available at 1.48 seconds
No message available at 2.56 seconds
Got message: stop after 3.35 seconds

最初のメッセージは、parfeval を実行してから 0.39 秒後に返されます。その時間に parfeval のデータと関数がシリアル化され、ワーカーに送信されてから、逆シリアル化されて実行が設定されています。コードを開始すると、ワーカーがシリアル化されたデータを送信します。このデータがネットワーク経由でクライアントに送り返され、データ キューに入れられます。poll はこの操作を記録し、値をクライアント関数に返します。次に、parfeval が呼び出されてからの所要時間が表示されます。ワーカーが何かを計算しているときに 3 秒の遅延 (この例では長い一時停止) があることに注意してください。

入力引数

すべて折りたたむ

ポーリング可能なデータ キュー。parallel.pool.PollableDataQueue オブジェクトとして指定します。

例: [data, OK] = poll(pollablequeue, optionalTimeout);

値を返す前に poll をブロックするために使用される、オプションのタイムアウト間隔 (秒単位)。スカラーとして指定します。

例: [data, OK] = poll(pollablequeue, timeout);

出力引数

すべて折りたたむ

ワーカーからデータ キューへのメッセージまたはデータ。任意のシリアル化可能な値として指定します。

例: [data, OK] = poll(pollablequeue, timeout);

データが返されたかどうかをチェックします。ブール値として返されます。データが返された場合は、OK にブール値 true が代入されます。キュー pollablequeue にデータがない場合は空の配列が返され、OK にはブール値 false が返されます。

例: [data, OK] = poll(pollablequeue, timeout);

バージョン履歴

R2017a で導入