GooglSTTService: cleanup request queues

This commit is contained in:
Aleix Conchillo Flaqué
2025-06-25 10:22:29 -07:00
parent eb5ecab104
commit d2730e6741

View File

@@ -437,7 +437,6 @@ class GoogleSTTService(STTService):
self._location = location self._location = location
self._stream = None self._stream = None
self._config = None self._config = None
self._request_queue = asyncio.Queue()
self._streaming_task = None self._streaming_task = None
# Used for keep-alive logic # Used for keep-alive logic
@@ -684,23 +683,15 @@ class GoogleSTTService(STTService):
), ),
) )
self._request_queue = asyncio.Queue()
self._streaming_task = self.create_task(self._stream_audio()) self._streaming_task = self.create_task(self._stream_audio())
async def _disconnect(self): async def _disconnect(self):
"""Clean up streaming recognition resources.""" """Clean up streaming recognition resources."""
if self._streaming_task: if self._streaming_task:
logger.debug("Disconnecting from Google Speech-to-Text") logger.debug("Disconnecting from Google Speech-to-Text")
# Send sentinel value to stop request generator
await self._request_queue.put(None)
await self.cancel_task(self._streaming_task) await self.cancel_task(self._streaming_task)
self._streaming_task = None self._streaming_task = None
# Clear any remaining items in the queue
while not self._request_queue.empty():
try:
self._request_queue.get_nowait()
self._request_queue.task_done()
except asyncio.QueueEmpty:
break
async def _request_generator(self): async def _request_generator(self):
"""Generates requests for the streaming recognize method.""" """Generates requests for the streaming recognize method."""
@@ -715,10 +706,9 @@ class GoogleSTTService(STTService):
) )
while True: while True:
try:
audio_data = await self._request_queue.get() audio_data = await self._request_queue.get()
if audio_data is None: # Sentinel value to stop
break self._request_queue.task_done()
# Check streaming limit # Check streaming limit
if (int(time.time() * 1000) - self._stream_start_time) > self.STREAMING_LIMIT: if (int(time.time() * 1000) - self._stream_start_time) > self.STREAMING_LIMIT:
@@ -734,11 +724,6 @@ class GoogleSTTService(STTService):
self._audio_input.append(audio_data) self._audio_input.append(audio_data)
yield cloud_speech.StreamingRecognizeRequest(audio=audio_data) yield cloud_speech.StreamingRecognizeRequest(audio=audio_data)
except asyncio.CancelledError:
break
finally:
self._request_queue.task_done()
except Exception as e: except Exception as e:
logger.error(f"Error in request generator: {e}") logger.error(f"Error in request generator: {e}")
raise raise