2011-06-01 35 views
4

我正在使用pyAudio來聽音頻設備,並在主程序繼續運行時在後臺執行一些「內容」。通過python多處理啓動子進程掛起

我從第二個腳本開始,但希望整合到單個腳本中以提供可支持性。當我將函數移入並使用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, 
         channels = CHANNELS, 
         rate = RATE, 
         input = True, 
         frames_per_buffer = INPUT_FRAMES_PER_BLOCK) 

有一些關於多和線程我失蹤了?這是一個壞主意嗎?我應該堅持將偵聽器代碼保存在單獨的腳本中嗎?

在此先感謝!

+0

好的,發佈後,我意識到這可能不是一個嚴格的python問題。雖然代碼是python,但它正在web2py框架下運行。我在web2py之外測試過,效果很好。我將打開問題並將問題發送到web2py郵件列表。如果我得到修復,我也會在這裏發佈。 – Nite 2011-06-01 15:11:30

回答

1

__init__方法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_manager,它看起來像一個必需的參數。