poll

Извлечение данных, отправленных от работника

Описание

пример

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

пример

[data, OK] = poll(pollablequeue, timeout) возвращает data, и OK как логическое значение true, указывающее, что данные возвращены. Если в очереди нет данных, то возвращается пустой массив с логическим false для OK. Задайте timeout в секундах как необязательный второй параметр. В этом случае метод может заблокировать на время, заданное как timeout перед возвращением. Если какие-либо данные поступают в очередь в течение этого периода, эти данные возвращаются.

Примеры

свернуть все

Создайте a PollableDataQueue.

p = parallel.pool.PollableDataQueue;
Запуск a parfor-цикл, и отправить сообщение, такое как данные со значением 1.
parfor i = 1
    send(p, i); 
end
Опрос на результат.

poll(p)
1

Для получения дополнительной информации об отправке данных с помощью a PollableDataQueue, см. send.

В этом примере показано, как вернуть промежуточные результаты от работника клиенту и отобразить результаты на клиенте.

Создайте a PollableDataQueue. A 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 с, пока рабочий процесс что-то вычисляет (в этом случае длительная пауза).

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

свернуть все

Загрязняемая очередь данных, заданная как 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