parallel.pool.PollableDataQueue

Отправка и опрос данных между клиентом и работниками

    Описание

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

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

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

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

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

    Создание

    Описание

    пример

    p = parallel.pool.PollableDataQueue создает объект, который может использоваться для отправки и опроса сообщений (или данных) от различных работников. Создайте PollableDataQueue на работнике или клиенте, где необходимо получить данные.

    Свойства

    расширить все

    Это свойство доступно только для чтения.

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

    Функции объекта

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

    Примеры

    свернуть все

    Создайте a PollableDataQueue.

    p = parallel.pool.PollableDataQueue;
    

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

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

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

    poll(p)
    1
    

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

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

    Когда клиент или рабочий процесс создает PollableDataQueue Объекты все сообщения, отправляемые в очередь, хранятся в памяти этого клиента или работника. Если клиент создает DataQueue объект, 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
    

    The 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 поскольку обработка очереди завершена.

    Введенный в R2017a