将文件内容保存在内存中

时间:2011-04-27 16:23:25

标签: python

我有一个相当大的二进制格式的pickle(dict)文件,每次从中查找分数时都需要几秒钟的时间加载。我想知道是否可以在内存中加载文件一次并从中查找,直到我退出程序。此外,如果有任何其他方法可以加快我的搜索速度 提前谢谢了。

5 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:2)

当我遇到这种问题时,我通常会创建一个函数并使用memoize装饰器进行装饰。在http://wiki.python.org/moin/PythonDecoratorLibrary

上查找“Memoize”

例如:

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

foo = get_dict()['foo']

在此处使用memoization而不是在加载时执行此操作会使这种情况变得懒散,因此如果您在程序的某些使用过程中最终没有使用该文件,则无需支付加载它的成本。

另外,像另一张海报建议你应该使用cPickle:

import cPickle as pickle

您可能还会考虑打破大字典,可能经常在一个泡菜中使用数据而在其他泡菜中使用较少的数据。

答案 2 :(得分:1)

shelve是另一种选择。

答案 3 :(得分:1)

使用cPickle模块而不是Pickle将加速pickle机制,但将未打开的dict保留在内存中是一个好主意。

答案 4 :(得分:0)

将代码放入模块(主要是将其放在一个单独的文件中),然后在需要进行一些查找时加载模块。

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

<强> mymodule.py

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

<强> program.py

import mymodule
value = mymodule.data[key]