在Python中保持对象以便在其他程序中使用

2 投票
1 回答
905 浏览
提问于 2025-04-21 01:25

我正在使用word2vec来计算两个词之间的相似度。为了这个模型,我使用的是GoogleNews。这个模型非常大,所以加载它需要花费很多时间。

model = Word2Vec.load_word2vec_format('D:/Userfiles/vsachidananda/Downloads/GoogleNews-vectors negative300.bin.gz', binary=True)

我想把这个模型加载到一个变量或对象里,这样每次运行Python程序时,我就可以直接调用它。

model.similarity('word1','word2')

请问怎么才能做到这一点呢?有什么想法吗?

1 个回答

1

我知道的唯一一种在Python进程之间共享复杂对象的方法是使用 multiprocessing.Manager。不过,每次需要和子进程共享 model 时,它都会被序列化反序列化。我想这会和 load_word2vec_format 一样慢。

你可以考虑运行一个启动器,先加载一次 model,然后等待并根据需要执行其他的Python脚本。一个非常简单的启动器大概是这样的:

import Word2Vec
model = Word2Vec.load_word2vec_format(...)

try:
    import traceback
    import script

    while True:
        raw_input()

        try:
            reload(script)
            script.main(model)
        except:
            print traceback.print_exc()

except KeyboardInterrupt:
    print 'exit launcher'

使用这个基本的启动器,script.py 应该放在同一个文件夹里,并且需要定义一个 main() 函数:

def main(model):
    model.similarity('word1','word2')
    ...

撰写回答