exponenta event banner

опрос

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

Описание

пример

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

пример

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

Примеры

свернуть все

Построить PollableDataQueue.

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

poll(p)
1

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

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

Построить 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