多处理管道轮询挂起

时间:2015-11-10 16:57:02

标签: python pipe multiprocessing

我有2个进程,一个是主进程,另一个是数据生成器。

我试图以相当快的速度生成数据,每100个usecs一对值。由于主进程有更多的事情需要做,主要的过程是通过一个简单的多进程管道告诉Generator进程现在它已准备好接收新的数据包。

不幸的是,生成器进程中的statuspipe.poll()语句会在不规则的时间段内挂起几毫秒。那是为什么?

设置数据和状态管的父进程:

from multiprocessing import Process,Pipe

    self.pipe1_parent, self.pipe1_child = Pipe(duplex=False)
    self.statuspipe_parent, self.statuspipe_child = Pipe(duplex=False)

    self.process1 = Process(target=data_generator.generate_values, args=(self.data_generator,self.pipe1_child,self.statuspipe_parent))
    self.process1.start()

生成数据的子进程

def generate_values(self,pipe1,statuspipe):
    tmpcount = 0
    self.data = np.empty((self.blocksize + 1,2), dtype=np.uint16)

    while 1:
        ValueGenerator.next(self)
        #can the data pipe be filled with next dataset ?

        if statuspipe.poll():

            self.data[tmpcount,0] = tmpcount
            self.data[tmpcount,1] = self.timestamp
            pipe1.send(self.data[0:tmpcount])
            tmpcount = 0
            msg = statuspipe.recv()
        else:
            self.data[tmpcount,0] = tmpcount
            self.data[tmpcount,1] = self.timestamp
            tmpcount = tmpcount + 1

我已经尝试使用Duplex = True和False设置StatusPipe,但我没有看到太多区别。

0 个答案:

没有答案