parallel.pool.PollableDataQueue

Класс, который позволяет отправить и опросить относительно данных между клиентом и рабочими

Описание

PollableDataQueue позволяет отправить и опросить относительно данных или сообщений между рабочими и клиентом в параллельном пуле, в то время как расчет выполняется. Можно получить промежуточные значения и прогресс расчета.

Чтобы отправить данные от параллельного рабочего пула назад клиенту, сначала создайте PollableDataQueue в клиенте. Передайте этот PollableDataQueue в parfor- цикл или другое построение языка параллельного программирования, такое как parfeval. От рабочих вызовите send передать данные обратно клиенту. В клиенте используйте poll получать результат сообщения или данных, отправленных от рабочего.

  • Можно вызвать send от процесса, который вызывает конструктора при необходимости.

  • Можно создать очередь на рабочих и передать ее обратно клиенту, чтобы включить коммуникацию в обратном направлении. Однако вы не можете отправить очередь от одного рабочего другому. Используйте spmd, labSend, или labReceive вместо этого.

  • В отличие от всех других объектов указателя, PollableDataQueue экземпляры действительно остаются связанными, когда они отправляются рабочим.

Конструкция

p = parallel.pool.PollableDataQueue

Конструктор для PollableDataQueue не берет аргументов и возвращает объект, который может использоваться, чтобы отправить и опросить относительно сообщений (или данные) от различных рабочих. Вы вызываете конструктора только в процессе, где вы хотите получить данные. В обычном рабочем процессе рабочие не должны вызывать конструктора, но должны быть вручены существующий PollableDataQueue экземпляр вместо этого.

Свойства

свернуть все

Свойство только для чтения, которое указывает, сколько элементов данных ожидает, чтобы быть удаленными из очереди. Значением является 0 или положительное целое число на процессе, который создал DataQueue экземпляр. Значением является 0 на всех других процессах.

Методы

parallel.pool.PollableDataQueue объект имеет следующие методы.

poll Получите данные, отправленные от рабочего
sendОтправьте данные от рабочего клиенту, использующему очередь данных

Примеры

свернуть все

Когда вы отправляете сообщение в PollableDataQueue объект, сообщение ожидает в очереди. Каждое сообщение добавляет 1 к длине очереди. Когда вы используете poll, одно сообщение собрано у очереди. В этом примере вы используете QueueLength свойство найти длину PollableDataQueue объект.

Когда процесс MATLAB создает PollableDataQueue объект, любые сообщения, которые отправляются очереди, сохранен в памяти о том процессе. Поэтому QueueLength свойством на всех других процессах является 0. В этом примере вы создаете PollableDataQueue объект на клиенте, и отправляет данные от рабочего.

Во-первых, создайте параллельный пул с одним рабочим.

parpool(1);
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 1).

Создайте PollableDataQueue.

pdq = parallel.pool.PollableDataQueue
pdq = 
  PollableDataQueue with properties:

    QueueLength: 0

Недавно созданный PollableDataQueue имеет пустую очередь. Можно использовать parfor найти pdq.QueueLength на рабочем. Найдите длину очереди на клиенте и длину очереди на рабочем.

fprintf('On the client: %i\n', pdq.QueueLength)
On the client: 0
parfor i = 1
    fprintf('On the worker: %i\n', pdq.QueueLength)
end
On the worker: 0

Когда очередь пуста, QueueLength 0 и для клиента и для рабочего. Затем отправьте сообщение очереди. Затем используйте QueueLength свойство найти длину очереди.

% Send a message first
parfor i = 1
    send(pdq, 'A message');
end

% Find the length
fprintf('On the client: %i\n', pdq.QueueLength)
On the client: 1
parfor i = 1
    fprintf('On the worker: %i\n', pdq.QueueLength)
end
On the worker: 0

QueueLength свойством является 1 на клиенте и 0 на рабочем. Используйте poll получать сообщение из очереди.

msg = poll(pdq);
disp(msg)
A message

Используйте QueueLength свойство найти длину очереди.

fprintf('On the client: %i\n', pdq.QueueLength)
On the client: 0

QueueLength 0 потому что обработка очереди завершена.

Создайте a PollableDataQueue.

p = parallel.pool.PollableDataQueue;

Запустите a parfor- цикл, и отправляет сообщение, такое как данные со значением 1.

parfor i = 1
    send(p, i); 
end

Опросите относительно результата.

poll(p)
1

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

Введенный в R2017a