我有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,但我没有看到太多区别。