通过python多处理挂起启动子进程
我正在使用pyAudio来收听音频设备,并在主程序继续运行时在后台做一些“工作” 我从第二个脚本开始,但希望整合到一个脚本中以提高可支持性。当我移入函数并使用进程来启动侦听器时,它只是挂起而从不运行 以下是简化的代码片段:通过python多处理挂起启动子进程,python,debugging,multiprocessing,pyaudio,Python,Debugging,Multiprocessing,Pyaudio,我正在使用pyAudio来收听音频设备,并在主程序继续运行时在后台做一些“工作” 我从第二个脚本开始,但希望整合到一个脚本中以提高可支持性。当我移入函数并使用进程来启动侦听器时,它只是挂起而从不运行 以下是简化的代码片段: def listener(self, q): CHANNELS = 2 RATE = 44100 INPUT_BLOCK_TIME = 0.05 FORMAT =
def listener(self, q):
CHANNELS = 2
RATE = 44100
INPUT_BLOCK_TIME = 0.05
FORMAT = pyaudio.paInt16
RATE = 44100
INPUT_FRAMES_PER_BLOCK = int(RATE*INPUT_BLOCK_TIME)
p = pyaudio.PyAudio()
stream = p.open(format = FORMAT,
channels = CHANNELS,
rate = RATE,
input = True,
frames_per_buffer = INPUT_FRAMES_PER_BLOCK)
q.put(os.getpid())
import time
time.sleep(300)
def startListener(self):
q = Queue()
p = Process(target=self.listener, args=[q])
p.daemon=True
p.start()
print q.get()
现在,如果我删除以下流设置,那么我将按预期返回进程ID:
stream = p.open(format = FORMAT,
channels = CHANNELS,
rate = RATE,
input = True,
frames_per_buffer = INPUT_FRAMES_PER_BLOCK)
我是否缺少关于多处理和线程的一些东西?这是个坏主意吗?我应该坚持将侦听器代码保存在单独的脚本中吗
提前谢谢 pyaudio.open()的
初始化方法是:
__init__(self, PA_manager, rate, channels, format, input=False, output=False, input_device_index=None, output_device_index=None, frames_per_buffer=1024, start=True, input_host_api_specific_stream_info=None, output_host_api_specific_stream_info=None)
根据他们网站上的文件。您似乎没有设置看起来像必需参数的PA_管理器。Ok,发布后我意识到这可能不是严格意义上的python问题。虽然代码是python,但它是在web2py框架下运行的。我在web2py之外进行了测试,效果很好。我将把问题留待讨论,然后将问题提交到web2py邮件列表。如果我得到一个补丁,我也会把它贴在这里。