在python中存储和使用大型文本文件的最佳方法

2024-09-28 20:17:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为我用python编写的一个令人困惑的克隆创建一个网络服务器,它接受用户、解算棋盘并为玩家输入打分。我使用的字典文件是1.8MB(ENABLE2K字典),我需要它对几个游戏求解器类可用。现在,我有了它,这样每个类就可以逐行遍历文件并生成一个哈希表(关联数组),但是我实例化的解算器类越多,它占用的内存就越多。在

我想做的是导入字典文件一次,并传递给每个求解器实例,因为他们需要它。但是最好的办法是什么?我应该在全局空间中导入字典,然后在solver类中以globals()['dictionary']的形式访问它吗?还是应该导入字典,然后将其作为参数传递给类构造函数?其中一个比另一个好吗?还有第三种选择吗?在


Tags: 文件实例内存用户网络服务器游戏棋盘
3条回答

如果您创建一个字典.py模块,包含读取文件并生成字典的代码,此代码仅在第一次导入时执行。进一步导入将返回对现有模块实例的引用。因此,您的课程可以:

import dictionary

dictionary.words[whatever]

在哪里字典.py有:

^{pr2}$

尽管在这一点上它本质上是一个单例的,但反对全局变量的常见论点仍然适用。对于pythonic singleton替代品,请查找“borg”对象。在

这是唯一的区别。一旦dictionary对象被创建,除非显式执行深度复制,否则只在传递时绑定新引用。只要每个解算器实例不需要私有副本进行修改,它就可以集中构建一次,并且只构建一次。在

亚当,记住在Python中你说:

a = read_dict_from_file()
b = a

。。。实际上,您并不是在复制a,因此使用更多内存,您只是在对同一对象进行b的另一个引用。在

因此,基本上,您提出的任何解决方案在内存使用方面都会好得多。基本上,在字典里读一次一次,然后坚持引用。无论是使用全局变量执行此操作,还是将其传递给每个实例或其他对象,都将引用同一对象而不是复制它。在

哪一个最像Python?这是另一个虫子,但我个人会这么做:

^{pr2}$

好吧。在

相关问题 更多 >