Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 多处理管道轮询挂起_Python_Pipe_Multiprocessing - Fatal编程技术网

Python 多处理管道轮询挂起

Python 多处理管道轮询挂起,python,pipe,multiprocessing,Python,Pipe,Multiprocessing,我有两个进程,一个是主进程,一个是数据生成器 我试图快速生成数据,每100个使用一对值。由于主进程有更多的工作要做,主进程通过一个简单的多进程管道告诉生成器进程,它现在可以接收新的数据包了 不幸的是,生成器进程中的statuspipe.poll()语句以非规则周期挂起几毫秒。为什么呢 设置数据和状态管道的父进程: from multiprocessing import Process,Pipe self.pipe1_parent, self.pipe1_child = Pipe(dup

我有两个进程,一个是主进程,一个是数据生成器

我试图快速生成数据,每100个使用一对值。由于主进程有更多的工作要做,主进程通过一个简单的多进程管道告诉生成器进程,它现在可以接收新的数据包了

不幸的是,生成器进程中的
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,但我看不出有多大区别。

常规操作系统任务调度正在下面进行。考虑到子进程正在全速运行,可能需要几毫秒的时间。您可以尝试提高子进程的优先级。下面正在进行常规操作系统任务调度。考虑到子进程正在全速运行,可能需要几毫秒的时间。您可以尝试提高子进程的优先级。