From 53c8c9ca5d2a49ab275285aa91ae926892bb8d24 Mon Sep 17 00:00:00 2001 From: Fireblade Date: Tue, 21 Jan 2025 14:45:43 -0500 Subject: [PATCH] Fixed thread leak because of creating excessive E-speak backends --- api/src/services/text_processing/phonemizer.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/api/src/services/text_processing/phonemizer.py b/api/src/services/text_processing/phonemizer.py index a328bb5..90d30f1 100644 --- a/api/src/services/text_processing/phonemizer.py +++ b/api/src/services/text_processing/phonemizer.py @@ -4,7 +4,7 @@ from abc import ABC, abstractmethod import phonemizer from .normalizer import normalize_text - +phonemizers = {} class PhonemizerBackend(ABC): """Abstract base class for phonemization backends""" @@ -34,6 +34,7 @@ class EspeakBackend(PhonemizerBackend): self.backend = phonemizer.backend.EspeakBackend( language=language, preserve_punctuation=True, with_stress=True ) + self.language = language def phonemize(self, text: str) -> str: @@ -91,8 +92,9 @@ def phonemize(text: str, language: str = "a", normalize: bool = True) -> str: Returns: Phonemized text """ + global phonemizers if normalize: text = normalize_text(text) - - phonemizer = create_phonemizer(language) - return phonemizer.phonemize(text) + if language not in phonemizers: + phonemizers[language]=create_phonemizer(language) + return phonemizers[language].phonemize(text)