2011-04-27 64 views
1

我有一个相当大的二进制格式的pickle(dict)文件,每次从它上面查找分数时都需要几秒钟来加载。我想知道是否可以在内存中加载文件一次,然后查看它直到我退出程序。此外,如果有任何其他方法来加快我的搜索。
非常感谢提前。将文件内容保存在内存中

回答

2

当我遇到这种问题时,我通常会创建一个函数并用memoize装饰器来装饰它。寻找“memoize的”关于http://wiki.python.org/moin/PythonDecoratorLibrary

例如:

@memoized 
def get_dict(): 
    return pickle.load(file) 

foo = get_dict()['foo'] 

使用记忆化在这里不是做它装载的让所以如果你最终在程序的某些用途不使用文件懒洋洋地出现这种情况,你不要支付加载它的成本。

此外,像其他海报建议你应该使用的cPickle:

import cPickle as pickle 

您也可以考虑打破了大词典起来了,也许经常在一个泡菜和其他较少使用的数据使用的数据。

2

加载数据,然后传递该引用,而不是每次查找分数时再次加载它。现在,我不知道你的代码是什么样子,但一个简单的例子:

def lookup(data): 
    // do stuff with data 

data = Pickle.load("file") 
lookup(data) 
1

使用的cPickle模块,而不是泡菜将加速咸菜机制,但在内存中保存拆封字典是一个好主意。

0

将你的代码写入模块(主要是把它放在一个单独的文件中),然后加载模块,无论你需要做什么查找。

让模块初始化其变量data变量。这只会在第一次导入时发生。如果程序的其他部分import是同一模块,系统缓存版本将自动使用,并且其中的代码将不会再次运行。

mymodule.py

import pickle 
data = pickle.load(open("picklefile", "rb")) 

program.py

import mymodule 
value = mymodule.data[key]