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
    

    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