poll

Получите данные, отправленные от рабочего

Описание

пример

poll(pollablequeue) получает результат сообщения или данных, отправленных от рабочего к parallel.pool.PollableDataQueue заданный pollablequeue. Можно использовать опрос только в процессе, где вы создали очередь данных.

пример

[data, OK] = poll(pollablequeue, timeout) возвращает data, и OK как булева истина, чтобы указать, что данные были возвращены. Если нет никаких данных в очереди, то пустой массив возвращен с булевой ложью для OK. Задайте 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

Первое сообщение возвращено в 0,39 с после того, как вы выполнили parfeval. В то время данные и функция для parfeval были сериализированы, отправлены рабочим, десериализовали и установил выполнение. Когда вы запускаете код, рабочий отправляет некоторые данные, которые сериализируются, отправляются по сети назад клиенту и ставятся очередь данных. poll примечания эта операция и возвращают значение к клиентской функции. Затем время, потраченное начиная с parfeval был назван отображен. Отметьте задержку 3 с, в то время как рабочий вычисляет что-то (в этом случае длинная пауза).

Входные параметры

свернуть все

Очередь данных Pollable, заданная как parallel.pool.PollableDataQueue объект.

Пример: [data, OK] = poll(pollablequeue, optionalTimeout);

Дополнительный интервал тайм-аута (в секундах) используемый к блоку poll перед возвратом, заданным как скаляр.

Пример: [data, OK] = poll(pollablequeue, timeout);

Выходные аргументы

свернуть все

Сообщение или данные от рабочих очереди данных, заданной как любое сериализуемое значение.

Пример: [data, OK] = poll(pollablequeue, timeout);

Проверяйте, были ли данные возвращены, возвращены как булево значение. Если данные были возвращены, то OK присвоен значение булева true. Если нет никаких данных в очереди pollablequeue, затем пустой массив возвращен и булев false для OK.

Пример: [data, OK] = poll(pollablequeue, timeout);

Введенный в R2017a