Python 多处理管道轮询挂起
我有两个进程,一个是主进程,一个是数据生成器 我试图快速生成数据,每100个使用一对值。由于主进程有更多的工作要做,主进程通过一个简单的多进程管道告诉生成器进程,它现在可以接收新的数据包了 不幸的是,生成器进程中的Python 多处理管道轮询挂起,python,pipe,multiprocessing,Python,Pipe,Multiprocessing,我有两个进程,一个是主进程,一个是数据生成器 我试图快速生成数据,每100个使用一对值。由于主进程有更多的工作要做,主进程通过一个简单的多进程管道告诉生成器进程,它现在可以接收新的数据包了 不幸的是,生成器进程中的statuspipe.poll()语句以非规则周期挂起几毫秒。为什么呢 设置数据和状态管道的父进程: from multiprocessing import Process,Pipe self.pipe1_parent, self.pipe1_child = Pipe(dup
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,但我看不出有多大区别。常规操作系统任务调度正在下面进行。考虑到子进程正在全速运行,可能需要几毫秒的时间。您可以尝试提高子进程的优先级。下面正在进行常规操作系统任务调度。考虑到子进程正在全速运行,可能需要几毫秒的时间。您可以尝试提高子进程的优先级。