主要内容

parallel.pool.PollableDataQueue

在客户端和工人之间发送和轮询数据

    描述

    PollableDataQueue在并行池中,当计算正在执行时,允许在工作者和客户端之间同步发送和轮询数据或消息。可以得到中间值和计算进度。

    要将数据从并行池工作线程发送回客户机,首先构造一个PollableDataQueue在客户端。通过这个PollableDataQueue成一个parfor-loop或其他并行语言结构,例如parfeval.来自工人的呼唤发送将数据发送回客户端。在客户端,使用民意调查检索从工作者发送的消息或数据的结果。

    • 你可以打电话发送对象的工作人员或客户端PollableDataQueue,如有需要。

    • 您可以在worker上构造队列并将其发送回客户端,以实现反向通信。但是,您不能将队列从一个工作者发送到另一个工作者。使用spmdlabSend,或labReceive代替。

    • 与所有其他句柄对象不同,PollableDataQueue而且DataQueue实例在发送给工作者时仍然保持连接。

    创建

    描述

    例子

    p= parallel.pool.PollableDataQueue创建一个对象,用于从不同的工作者发送和轮询消息(或数据)。创建PollableDataQueue在您想要接收数据的worker或客户端上。

    属性

    全部展开

    此属性是只读的。

    等待从队列中删除的数据项数,指定为零或正整数。取值为0对象的worker或客户机上的正整数PollableDataQueue实例。如果客户端创建PollableDataQueue实例,取值为0所有的工人。如果工作人员创建PollableDataQueue,值为0客户端和所有其他工作人员。

    对象的功能

    民意调查 检索从worker发送的数据
    发送 使用数据队列将数据从工作人员发送到客户端

    例子

    全部折叠

    构造一个PollableDataQueue

    p = parallel.pool.PollableDataQueue;

    开始一个parfor-loop,并发送消息,例如data的值为1。

    parforI = 1 send(p, I);结束

    投票结果。

    调查(p)
    1

    有关使用a轮询数据的详细信息PollableDataQueue,请参阅民意调查

    当你给一个PollableDataQueue对象时,消息将在队列中等待。每条消息添加1到队列长度。当你使用民意调查时,从队列中收集一条消息。在本例中,使用QueueLength属性求a的长度PollableDataQueue对象。

    当客户端或工作人员创建PollableDataQueue对象时,发送到队列的任何消息都保存在该客户端或worker的内存中。如果客户端创建了DataQueue对象,QueueLength所有工人的财产都是0.在本例中,您创建了一个PollableDataQueue对象,并从一个worker发送数据。

    首先,用一个worker创建一个并行池。

    parpool (1);
    使用“本地”配置文件启动并行池(parpool)…连接到并行池(工人数:1)。

    创建一个PollableDataQueue

    pdq = parallel.pool.PollableDataQueue
    pdq = PollableDataQueue,属性:QueueLength: 0

    新创建的PollableDataQueue有一个空队列。你可以使用parfor找到pdq。QueueLength在工人身上。查找客户机上的队列长度,以及worker上的队列长度。

    流('在客户端:%i\n'pdq.QueueLength)
    客户端:0
    parforI = 1 fprintf(工人:%i\npdq.QueueLength)结束
    工人:0

    由于队列为空,因此QueueLength0对客户和工人都有好处。接下来,向队列发送消息。然后,使用QueueLength属性查找队列的长度。

    先发消息parforI = 1 send(pdq,“消息”);结束计算长度流('在客户端:%i\n'pdq.QueueLength)
    客户端:1 .单击“确定”
    parforI = 1 fprintf(工人:%i\npdq.QueueLength)结束
    工人:0

    QueueLength属性是1在客户端,和0在工人身上。使用民意调查从队列中检索消息。

    MSG = poll(pdq);disp(味精)
    一个消息

    使用QueueLength属性查找队列的长度。

    流('在客户端:%i\n'pdq.QueueLength)
    客户端:0

    QueueLength0因为队列处理已经完成。

    在R2017a中引入