You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多进程环境下PyAudio音频流读取函数无限循环卡顿问题

问题解决:多进程下PyAudio流read卡住的问题

问题原因

PyAudio的音频流是与创建它的进程绑定的资源,主进程中初始化的Recorder对象包含的流,在子进程中无法正常工作——跨进程的资源句柄无法共享,导致stream.read(chunk)陷入阻塞。

解决方案

不在主进程初始化Recorder,而是在子进程内部完成Recorder的初始化,让音频流归属于子进程本身。

修改后的代码示例

class Recorder:
    (...)

    def __init__(self):
        self.p = pyaudio.PyAudio()
        self.stream = self.p.open(format=FORMAT,
                                  channels=CHANNELS,
                                  rate=RATE,
                                  input=True,
                                  output=True,
                                  frames_per_buffer=chunk)
    (...) 
    def listen(self):
        print('Listening beginning')
        while True:
            input = self.stream.read(chunk)
            rms_val = self.rms(input)
            if rms_val > Threshold:
                self.record()


(...)

import multiprocessing
import time

def start_listening():
    # 子进程内独立初始化Recorder
    recorder = Recorder()
    recorder.listen()

# 创建并启动子进程
p = multiprocessing.Process(target=start_listening)
p.start()

# 主进程执行后续逻辑
while True:
    time.sleep(3)
    print("hello world")

补充说明

  • 子进程启动后会独立运行listen循环,主进程无需等待,可正常执行自身的循环逻辑。
  • 如果需要停止子进程,可调用p.terminate()方法;若要优雅退出,可给Recorder添加退出标志位,在listen循环中检测标志位退出。

内容的提问来源于stack exchange,提问作者plshelpmeout

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 23:20:42