【发布时间】:2020-07-08 16:34:42
【问题描述】:
是否可以使用多线程访问快速文本模型 (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 多线程没有专长。
【问题讨论】:
标签: python multithreading gensim fasttext