parallel.pool.DataQueue

类,支持在客户机和worker之间发送和侦听数据

描述

一种数据队列使得能够在平行池从工人发送数据或消息返回给客户端,而一个计算被执行。例如,你可以得到中间值和计算的进度指示。

要从并行池工作程序发送数据回客户端,首先构造DataQueue在客户端。通过这个DataQueueparfor循环或其他并行语言结构,例如spmd。从工人那里打电话发送将数据发送回客户端。在客户端,注册一个函数,在每次接收数据时调用afterEach

  • 你可以叫发送如果需要,从调用构造函数的进程中调用。

  • 您可以在workers上构造队列并将其发送回客户机,以启用反向通信。但是,不能将队列从一个worker发送到另一个worker。使用spmd,labSend,或labReceive代替。

  • 与所有其他处理的对象,DataQueue当他们被送到工人情况也保持连接。

创建

描述

例子

= parallel.pool.DataQueue不采用任何参数和返回可用于发送或侦听来自不同的工人的消息(或数据)的对象。你调用构造函数只有在要接收数据的过程。在平时的工作流程中,工人不应该调用构造函数,而应交由现有DataQueue实例。

属性

全部展开

队列上的依赖属性,指示有多少项数据等待从队列中删除。

q = parallel.pool.DataQueue;%队列中没有消息,因为没有发送任何消息。q.QueueLength
ans = 0
q.send (“发送消息”)%现在QueueLength = 1,因为已经发送了一条消息。q.QueueLength
ans = 1
添加一个回调函数来处理队列。侦听器= q.afterEach (@disp);
发送消息
%现在QueueLength = 0,因为没有更多挂起的消息。q.QueueLength
ans = 0
现在发送的%数据立即被回调处理,因此QueueLength保持为0。q.send (“发送消息2”)q.QueueLength
发送消息2 ans = 0
%删除所有回调监听导致邮件在队列中再次建立。删除(听众)q.send (“发送消息3”)q.QueueLength
ans = 1

对象的功能

一个parallel.pool.DataQueue对象具有以下方法。

afterEach 定义在数据队列上接收到新数据时调用的函数
发送 使用数据队列将数据从worker发送到客户机

例子

全部折叠

构造一个DataQueue,叫afterEach

q = parallel.pool.DataQueue;afterEach (q, @disp);
开始一个parfor-loop,并发送消息。挂起的消息被传递到afterEach函数,在本例中@disp

parforsend(q, i);结束;
1 2 3

有关使用a侦听数据的详细信息,请参阅DataQueue,请参阅afterEach

创建一个DataQueue和使用afterEach指定每次队列接收数据时执行的函数。这个例子调用一个子函数来更新等待栏。

创建一个parfor循环来执行一个在MATLAB中需要计算的任务®。使用发送的每次迭代发送一些虚拟数据parfor循环。当队列接收到数据时,afterEach调用nUpdateWaitbar在客户端MATLAB,你可以观察等待吧进展。

功能D = parallel.pool.DataQueue;h = waitbar (0,“请等待…”);afterEach (D, @nUpdateWaitbar);N = 200;p = 1;parforI = 1:N A(I)= MAX(ABS(EIG(RAND(400))));发送(d,I);结束功能nUpdateWaitbar (~) waitbar (p / N、h);p = p + 1;结束结束

如果你叫afterEach并且在队列中有等待分派的项,这些项被立即分派到指定的函数句柄afterEach。调用afterEach在将数据发送到队列之前,确保打开发送,函数句柄@disp被称为。

构造一个DataQueue并调用afterEach

q = parallel.pool.DataQueue;afterEach (q, @disp);
如果随后向队列发送消息,则每个消息都传递到指定的函数句柄afterEach立即。

parforsend(q, i);结束发送(q, 0);
1 3 2 0

如果你将数据发送到队列中,然后调用afterEach,将每个挂起的消息传递给指定的函数句柄afterEach

q = parallel.pool.DataQueue;parforsend(q, i);结束afterEach (q, @disp);
3 1 2

介绍了R2017a