Main Content

poll

ポーリング可能なデータ キューに送信されたデータの取得

説明

data = poll(pollablequeue) は、pollablequeue で指定された parallel.pool.PollableDataQueue から 1 つのデータ項目を取得します。クライアントまたは任意のワーカーからデータを送信できますが、ポーリング可能なデータ キューを作成したクライアントまたはワーカーで poll を呼び出す必要があります。

  • データがキューに入っている場合、poll はキュー内で最も古いデータ項目を返します。

  • データがキューに入っていない場合、poll[] を返します。

data = poll(pollablequeue,timeout) は、timeout 秒待機して PollableDataQueue オブジェクト pollablequeue からデータを取得します。

  • データがキューに入っている場合、poll はキュー内で最も古いデータ項目を返します。

  • データがキューに入っていない場合、poll は最大 timeout 秒待機します。timeout 秒経過する前にキューがデータを受信すると、poll はその項目を返します。timeout 秒経過する前にキューがデータを受信しないと、poll[] を返します。

[data,tf] = poll(___) は、キューから data を取得しようとします。poll がデータを返す場合、tf は true です。

この構文は、前述の構文にある任意の入力引数の組み合わせと共に使用できます。たとえば、[data,tf] = poll(pollablequeue,5) は、5 秒間待機してキュー pollablequeue からデータを取得します。

すべて折りたたむ

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 = poll(pollablequeue);

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

例: data = poll(pollablequeue,timeout);

出力引数

すべて折りたたむ

データ キューに送信されたメッセージまたはデータ。任意のシリアル化可能な値として指定します。

例: data = poll(pollablequeue);

データが返されたかどうかを指定するフラグ。true または false として返されます。

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

拡張機能

バージョン履歴

R2017a で導入