update:优化代码

This commit is contained in:
hrz
2025-11-23 15:11:35 +08:00
parent 5d439a4168
commit 83a3d0eabe
7 changed files with 38 additions and 20 deletions
@@ -94,9 +94,12 @@ def opus_to_wav(conn, opus_data):
# 返回完整的WAV数据 # 返回完整的WAV数据
return bytes(wav_header) + pcm_data_bytes return bytes(wav_header) + pcm_data_bytes
finally: finally:
if decoder: if decoder is not None:
del decoder try:
gc.collect() del decoder
gc.collect()
except Exception as e:
conn.logger.bind(tag=TAG).debug(f"释放decoder资源时出错: {e}")
def enqueue_tts_report(conn, text, opus_data): def enqueue_tts_report(conn, text, opus_data):
@@ -349,6 +349,11 @@ class ASRProvider(ASRProviderBase):
async def close(self): async def close(self):
"""关闭资源""" """关闭资源"""
await self._cleanup(None) await self._cleanup(None)
if hasattr(self, 'decoder'): if hasattr(self, 'decoder') and self.decoder is not None:
del self.decoder try:
gc.collect() del self.decoder
self.decoder = None
gc.collect()
logger.bind(tag=TAG).debug("Aliyun decoder resources released")
except Exception as e:
logger.bind(tag=TAG).debug(f"释放Aliyun decoder资源时出错: {e}")
@@ -268,6 +268,9 @@ class ASRProviderBase(ABC):
logger.bind(tag=TAG).error(f"音频解码过程发生错误: {e}") logger.bind(tag=TAG).error(f"音频解码过程发生错误: {e}")
return [] return []
finally: finally:
if decoder: if decoder is not None:
del decoder try:
gc.collect() del decoder
gc.collect()
except Exception as e:
logger.bind(tag=TAG).debug(f"释放decoder资源时出错: {e}")
@@ -373,14 +373,14 @@ class ASRProvider(ASRProviderBase):
self.is_processing = False self.is_processing = False
# 显式释放decoder资源 # 显式释放decoder资源
if hasattr(self, 'decoder') and self.decoder: if hasattr(self, 'decoder') and self.decoder is not None:
try: try:
del self.decoder del self.decoder
self.decoder = None self.decoder = None
gc.collect() gc.collect()
logger.bind(tag=TAG).info("Doubao decoder resources released") logger.bind(tag=TAG).debug("Doubao decoder resources released")
except Exception as e: except Exception as e:
logger.bind(tag=TAG).error(f"Error releasing Doubao decoder: {e}") logger.bind(tag=TAG).debug(f"释放Doubao decoder资源时出错: {e}")
# 清理所有连接的音频缓冲区 # 清理所有连接的音频缓冲区
if hasattr(self, '_connections'): if hasattr(self, '_connections'):
@@ -515,14 +515,14 @@ class ASRProvider(ASRProviderBase):
self.is_processing = False self.is_processing = False
# 显式释放decoder资源 # 显式释放decoder资源
if hasattr(self, 'decoder') and self.decoder: if hasattr(self, 'decoder') and self.decoder is not None:
try: try:
del self.decoder del self.decoder
self.decoder = None self.decoder = None
gc.collect() gc.collect()
logger.bind(tag=TAG).info("Xunfei decoder resources released") logger.bind(tag=TAG).debug("Xunfei decoder resources released")
except Exception as e: except Exception as e:
logger.bind(tag=TAG).error(f"Error releasing Xunfei decoder: {e}") logger.bind(tag=TAG).debug(f"释放Xunfei decoder资源时出错: {e}")
# 清理所有连接的音频缓冲区 # 清理所有连接的音频缓冲区
if hasattr(self, "_connections"): if hasattr(self, "_connections"):
@@ -38,9 +38,12 @@ class VADProvider(VADProviderBase):
self.frame_window_threshold = 3 self.frame_window_threshold = 3
def __del__(self): def __del__(self):
if hasattr(self, 'decoder'): if hasattr(self, 'decoder') and self.decoder is not None:
del self.decoder try:
gc.collect() del self.decoder
gc.collect()
except Exception:
pass
def is_vad(self, conn, opus_packet): def is_vad(self, conn, opus_packet):
try: try:
+6 -2
View File
@@ -395,8 +395,12 @@ def opus_datas_to_wav_bytes(opus_datas, sample_rate=16000, channels=1):
wf.writeframes(pcm_bytes) wf.writeframes(pcm_bytes)
return wav_buffer.getvalue() return wav_buffer.getvalue()
finally: finally:
del decoder if decoder is not None:
gc.collect() try:
del decoder
gc.collect()
except Exception:
pass
def check_vad_update(before_config, new_config): def check_vad_update(before_config, new_config):