2011-04-27 72 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]