如何使用已经加载的pickle对象来自另一个文件

时间:2017-11-01 07:09:45

标签: python pickle naivebayes

我创建了一个天真的贝叶斯分类器,并使用泡菜来存储它 现在,每当我执行我的脚本时,pickle都会加载大约10-14秒 有什么方法可以让我的pickle对象加载到ram中并可以从另一个脚本访问它吗?

def load_classifier(self):
    f=open("segment_to_topic.pickle","rb")
    classifier=pickle.load(f)
    f.close()
    return classifier

1 个答案:

答案 0 :(得分:0)

您可以使用命名管道。 UNIX有os.mkfifo,windows替代版可能是win32pipe.CreateNamedPipe

UNIX解决方案是这样的:

<强> a.py

import os
import pickle
obj = {1:2, 3:4} # any object
fname = "segment_to_topic.pickle"
os.mkfifo(fname)
with open(fname, 'w') as f:
    pickle.dump(obj, f)

<强> b.py

import pickle
while True:
    try:
        with open('segment_to_topic.pickle','r') as f:
            print pickle.load(f)
    except:
        pass

然后你跑:

python ./b.py &
python ./a.py

b.py打印结果:

{1: 2, 3: 4}

如果您使用的是Windows,this可能会有帮助。

如果脚本都在python中,另一种解决方案是将第二个脚本作为新线程(或进程)从第一个脚本运行。线程可以在Queue对象中共享内存。