python中的生产者-消费者队列

时间:2019-06-13 02:23:37

标签: python sockets multiprocessing queue pyaudio

我正在使用生产者消费者模型,以便通过套接字将音频流传输到PyAudio。我有一个进程从套接字接收数据,然后将其放入队列中,而另一个进程从队列中获取数据并将其写入流中。在此过程中,部分流中出现了下溢+剪切。我的代码本质上就是这样

Process1

CHUNK = 1024
q = queue


data = s.recv(CHUNK)

#processes data

if q.qsize() < CHUNK * 2: #arbitrary value
    q.put(data)

while q.qsize() > CHUNK:
    time.sleep(5) 
#I use this to allow the queue to be emptied
#by the stream and manage my memory somewhat.

Process2

p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paInt16, channels=CHANNELS, rate=RATE, frames_per_buffer=CHUNK, output=True)

while True:
    if q.empty() is False:
        stream.write(q.get(), exception_on_underflow=True)

在显示下溢异常之前和之后,我做了一些记录以记录数据,并且我注意到的是,只有当q> = CHUNK(例如1025、1026)时,或者在初始填充流时才发生下溢。 1024,并且stream.get_write_availble在总的16384中始终>15000。我知道流中的数据很饿,但是当队列永远不为空时(例如总是要读入流中的数据)。任何帮助表示赞赏。

0 个答案:

没有答案