我有一个相当大的二进制格式的pickle(dict)文件,每次从它上面查找分数时都需要几秒钟来加载。我想知道是否可以在内存中加载文件一次,然后查看它直到我退出程序。此外,如果有任何其他方法来加快我的搜索。
非常感谢提前。将文件内容保存在内存中
1
A
回答
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
您也可以考虑打破了大词典起来了,也许经常在一个泡菜和其他较少使用的数据使用的数据。
1
shelve是一种替代方案。
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]
相关问题
- 1. 将MemoryCache内容保存到文件中
- 2. 阅读Xml文件并将内容保存到内存中WP7
- 3. 保存内容与文件放内容
- 4. 将HTML5 textarea内容保存到文件
- 5. 将NSMutableArray的内容保存到文件
- 6. 将内容保存为html文件
- 7. 将tinymce textarea内容保存到文件
- 8. Spring会将内容保存在内存中还是保存在磁盘中?
- 9. C#:保存文件中的treeview内容
- 10. 保存内容
- 11. 强制OpenGL将内容保存在内存中?
- 12. NSData在保护文件时将整个文件内容保存在内存中时进行流式传输吗?
- 13. 如何将文件系统的内容保存到文件中
- 14. 将WebBrowser控件内容保存为HTML
- 15. 将图像内容保存在html文件中
- 16. 如何在BlockUIContainer中将RichTextBox的内容保存到RTF文件?
- 17. 如何在.NET中将POST请求内容保存为文件
- 18. 保存的UITextView内容doc文件
- 19. ArrayController的保存内容到文件
- 20. 如何保存文件内容
- 21. Swing JFrame内容保存到html文件
- 22. 文件不保存lpstr内容
- 23. PHPExcel保存HTML内容XLS/X文件
- 24. 保存ListView内容
- 25. Android内容保存
- 26. 将持久文本文件保存在内部存储器中
- 27. 在Python中将RAR文件的内容读入内存中
- 28. 无法将webtable内容保存到qtp中的excel文件中
- 29. android保存内容在setContentView()
- 30. 如何将html内容保存到不保存到数据库中的文件