メインプログラムの実行を継続しながら、pyAudioを使用してオーディオデバイスをリッスンし、バックグラウンドで「何か」を実行しています。
最初は2番目のスクリプトから始めましたが、サポートのために1つのスクリプトに統合したいと思います。関数を移動し、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)
私が見逃しているマルチプロセッシングとスレッド化について何かありますか?これは悪い考えですか?リスナーコードを別のスクリプトに保持することに固執する必要がありますか?
前もって感謝します!