加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

通过python多处理启动子进程挂起

发布时间:2020-12-20 13:23:36 所属栏目:Python 来源:网络整理
导读:我正在使用pyAudio来收听音频设备,并在主程序继续运行时在后台执行一些“东西”. 我从第二个脚本开始,但想整合到一个脚本中以获得可支持性.当我移动函数并使用Process启动监听器时,它只是挂起并且永远不会运行. 这是简化的代码片段: def listener(self,q):
我正在使用pyAudio来收听音频设备,并在主程序继续运行时在后台执行一些“东西”.

我从第二个脚本开始,但想整合到一个脚本中以获得可支持性.当我移动函数并使用Process启动监听器时,它只是挂起并且永远不会运行.

这是简化的代码片段:

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,frames_per_buffer = INPUT_FRAMES_PER_BLOCK)

我有什么关于多处理和线程的东西吗?这是一个坏主意吗?我应该坚持将监听器代码保存在单独的脚本中吗?

提前致谢!

解决方法

pyaudio.open()的__init__方法是:

__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_manager.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读