メインコンテンツ

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[] を返します。

  • キューが閉じているかタイムアウトの間に閉じられ、データがキューに入っていない場合、poll は待機せずに [] を返します。

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

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

すべて折りたたむ

PollableDataQueue オブジェクトを作成します。

p = parallel.pool.PollableDataQueue;
parfor ループを実行し、値 1 をもつデータなどのメッセージを送信します。
parfor idx = 1
    send(p,idx); 
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 秒の遅延 (この例では長い一時停止) があることに注意してください。

入力引数

すべて折りたたむ

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

parallel.pool.PollableDataQueue 関数の Destination 引数を使用して設定されたキューの送信先動作により、データをどこでポーリングできるかが決まります。

  • Destination 引数を設定せずに PollableDataQueue オブジェクトを作成するか、Destination"creator" に設定している場合、キューの作成元のクライアントまたはワーカーでのみキューをポーリングしてデータを受信できます。

  • Destination"any" に設定している場合、クライアントまたは任意のワーカーでキューをポーリングしてデータを受信できます。データはキューで待機し、どちらでキューをポーリングするかに応じてクライアントまたはワーカーに送信されます。

R2025a より前: poll は、ポーリング可能なデータ キューを作成したクライアントまたはワーカーで呼び出す必要があります。

close 関数を使用して PollableDataQueue を閉じると、キューへのデータの送信はできなくなりますが、キュー内のデータのポーリングは引き続き可能です。 (R2025a 以降)

例: data = poll(pollablequeue);

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

例: data = poll(pollablequeue,timeout);

出力引数

すべて折りたたむ

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

例: data = poll(pollablequeue);

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

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

データ型: logical

拡張機能

すべて展開する

バージョン履歴

R2017a で導入