modfiy abort

This commit is contained in:
brige 2024-11-08 19:49:53 +08:00
parent 7406552289
commit 92b912e162
7 changed files with 41 additions and 3 deletions

View File

@ -34,6 +34,7 @@ class AsrBase:
observer.process(message)
def _notify_complete(self, message: str):
EventBus().post('clear_cache')
for observer in self._observers:
observer.completed(message)

View File

@ -22,6 +22,7 @@ class AudioInferenceHandler(AudioHandler):
super().__init__(context, handler)
EventBus().register('stop', self._on_stop)
EventBus().register('clear_cache', self.on_clear_cache)
self._mal_queue = SyncQueue(1, "AudioInferenceHandler_Mel")
self._audio_queue = SyncQueue(context.batch_size * 2, "AudioInferenceHandler_Audio")
@ -35,10 +36,15 @@ class AudioInferenceHandler(AudioHandler):
def __del__(self):
EventBus().unregister('stop', self._on_stop)
EventBus().unregister('clear_cache', self.on_clear_cache)
def _on_stop(self, *args, **kwargs):
self.stop()
def on_clear_cache(self, *args, **kwargs):
self._mal_queue.clear()
self._audio_queue.clear()
def on_handle(self, stream, type_):
if not self._is_running:
return

View File

@ -19,6 +19,7 @@ class AudioMalHandler(AudioHandler):
super().__init__(context, handler)
EventBus().register('stop', self._on_stop)
EventBus().register('clear_cache', self.on_clear_cache)
self._is_running = True
self._queue = SyncQueue(context.batch_size * 2, "AudioMalHandler_queue")
@ -34,10 +35,15 @@ class AudioMalHandler(AudioHandler):
def __del__(self):
EventBus().unregister('stop', self._on_stop)
EventBus().unregister('clear_cache', self.on_clear_cache)
def _on_stop(self, *args, **kwargs):
self.stop()
def on_clear_cache(self, *args, **kwargs):
self.frames.clear()
self._queue.clear()
def on_message(self, message):
super().on_message(message)

View File

@ -19,6 +19,7 @@ class HumanRender(AudioHandler):
super().__init__(context, handler)
EventBus().register('stop', self._on_stop)
EventBus().register('clear_cache', self.on_clear_cache)
play_clock = PlayClock()
self._voice_render = VoiceRender(play_clock, context)
self._video_render = VideoRender(play_clock, context, self)
@ -35,10 +36,14 @@ class HumanRender(AudioHandler):
def __del__(self):
EventBus().unregister('stop', self._on_stop)
EventBus().unregister('clear_cache', self.on_clear_cache)
def _on_stop(self, *args, **kwargs):
self.stop()
def on_clear_cache(self, *args, **kwargs):
self._queue.clear()
def _on_run(self):
logging.info('human render run')
while self._exit_event.is_set() and self._is_running:

View File

@ -17,13 +17,19 @@ class NLPBase(AsrObserver):
self._is_running = True
EventBus().register('stop', self.on_stop)
EventBus().register('clear_cache', self.on_clear_cache)
def __del__(self):
EventBus().unregister('stop', self.on_stop)
EventBus().unregister('clear_cache', self.on_clear_cache)
def on_stop(self, *args, **kwargs):
self.stop()
def on_clear_cache(self, *args, **kwargs):
logger.info('NLPBase clear_cache')
self._ask_queue.clear()
@property
def callback(self):
return self._callback

View File

@ -16,13 +16,19 @@ class TTSBase(NLPCallback):
self._message_queue = AsyncTaskQueue('TTSBaseQueue', 5)
self._is_running = True
EventBus().register('stop', self.on_stop)
EventBus().register('clear_cache', self.on_clear_cache)
def __del__(self):
EventBus().unregister('stop', self.on_stop)
EventBus().unregister('clear_cache', self.on_clear_cache)
def on_stop(self, *args, **kwargs):
self.stop()
def on_clear_cache(self, *args, **kwargs):
logger.info('TTSBase clear_cache')
self._message_queue.clear()
@property
def handle(self):
return self._handle

View File

@ -21,6 +21,7 @@ class TTSEdgeHttp(TTSBase):
# self._url = 'http://localhost:8082/v1/audio/speech'
self._url = 'https://tts.mzzsfy.eu.org/v1/audio/speech'
logger.info(f"TTSEdge init, {voice}")
self._response_list = []
async def _on_async_request(self, data):
async with aiohttp.ClientSession() as session:
@ -35,11 +36,12 @@ class TTSEdgeHttp(TTSBase):
def _on_sync_request(self, data):
response = requests.post(self._url, json=data)
self._response_list.append(response)
stream = None
if response.status_code == 200:
stream = BytesIO(response.content)
self._response_list.remove(response)
return stream
else:
return None
async def _on_request(self, txt: str):
logger.info(f'TTSEdgeHttp, _on_request, txt:{txt}')
@ -91,3 +93,9 @@ class TTSEdgeHttp(TTSBase):
print('TTSEdge close')
# if self._byte_stream is not None and not self._byte_stream.closed:
# self._byte_stream.close()
def on_clear_cache(self, *args, **kwargs):
logger.info('TTSEdgeHttp clear_cache')
super().on_clear_cache(*args, **kwargs)
for response in self._response_list:
response.close()