Можно ли получить доступ к модели быстрого текста (gensim) с помощью многопоточности?
В настоящее время я пытаюсь загрузить модель один раз (из-за размера и времени загрузки), чтобы она оставалась в памяти и получала доступ к функциям подобия. несколько тысяч раз подряд. Я хочу сделать это параллельно, и мой текущий подход использует класс-оболочку, который загружает модель и затем передается рабочим. Но похоже, что это не дает никаких результатов.
Класс оболочки. Инициируется один раз.
from gensim.models.fasttext import load_facebook_model
class FastTextLocalModel:
def __init__(self):
self.model_name = "cc.de.300.bin"
self.model_path = path.join("data", "models", self.model_name)
self.fast_text = None
def load_model(self):
self.fast_text = load_facebook_model(self.model_path)
def similarity(self, word1: str = None, word2: str = None):
return self.fast_text.wv.similarity(word1, word2)
И класс Processor использует методы FastTextLocalModel
, описанные выше:
fast_text_instance = FastTextLocalModel()
fast_text_instance.load_model()
with concurrent.futures.ThreadPoolExecutor(max_workers=multiprocessing.cpu_count()) as executor:
docs = corpus.get_documents() # docs is iterable
processor = ProcessorClass(model=fast_text_instance)
executor.map(processor.process, docs)
Использование max_workers=1
, кажется, работает.
Я должен упомянуть что у меня нет опыта в python многопоточности.