处理Python内存使用的可能修复
我有以下课程:处理Python内存使用的可能修复,python,Python,我有以下课程: class C1: STORE = [] TYPE = [] ITEMS = [] PRICE = [] def __init__(self,STORE,TYPE,ITEMS,PRICE): self.STORE = STORE self.TYPE = TYPE self.ITEMS = ITEMS self.PRICE = PRICE 该类的目的是在不同的商店中存储所
class C1:
STORE = []
TYPE = []
ITEMS = []
PRICE = []
def __init__(self,STORE,TYPE,ITEMS,PRICE):
self.STORE = STORE
self.TYPE = TYPE
self.ITEMS = ITEMS
self.PRICE = PRICE
该类的目的是在不同的商店中存储所有商品及其价格。商品按字母数字顺序排列,如果商店中不存在该商品,则价格显示为0。我正在从数据库中的表中检索数据,如下所示:
S1 S2 S3 .... S29000
item1 15 2 30 .... 100
item2 0 1 0 .... 5
.
.
.
item600 30 190 10 .... 25
相应地,存储和项目列表如下所示:
商店:['S1','S2',…,'S29000']
项目:['item1'、'item2'、..、'item600']
对于价目表,它是一个多维列表,通过指定门店索引和商品索引,它将为您提供指定门店指定商品的价格(例如,价格[0][0]将为您提供S1的商品1的价格,即15)
所有这些数据都在一个类中,我运行“报告”,其中包含一些“复杂”的计算
我遇到的问题是,我从不同的表创建类对象,根据Windows任务管理器,python的内存使用率几乎达到1.8GB
我知道我的对象是内存消耗的主要原因,这给我带来了两个问题:
但这并不能解决内存问题;考虑使用一个适当的数据库包,例如+或普通的B-树。 < P>你可以尝试<代码>数组< /C>模块,它在Python 2.3中。除此之外,您可能还需要研究如何为这些内容使用合适的数据库。您可以尝试使用
array
模块,它在Python2.3中已经存在。除此之外,您可能还需要研究如何为这些内容使用合适的数据库。在不了解更多算法的情况下,很难说些什么,但可能是一种选择?还是细胞素?Pyrex?在不了解更多算法的情况下很难说些什么,但也许会是一种选择?还是细胞素?Pyrex?您有一个800 x 30000矩阵。即每个阵列有2400000个元素。如果它们是浮动的,那么已经有大约100MB的空间了,但由于对象开销,空间会更大。你有六只这样的野兽
如果1.8GB太大,则必须存储更少的数据。对不起,这就是为什么真正的数字运算会很困难。确保你只拥有你需要的数据,就这样
如果该矩阵的大部分是空的,那么我建议查看一些稀疏矩阵库。SciPy/NumPy是最常见的,但我相信其他人也提供了一些可以使用python2.3的东西。也许是一个老NumPy?你有一个800 x 30000的矩阵。即每个阵列有2400000个元素。如果它们是浮动的,那么已经有大约100MB的空间了,但由于对象开销,空间会更大。你有六只这样的野兽 如果1.8GB太大,则必须存储更少的数据。对不起,这就是为什么真正的数字运算会很困难。确保你只拥有你需要的数据,就这样
如果该矩阵的大部分是空的,那么我建议查看一些稀疏矩阵库。SciPy/NumPy是最常见的,但我相信其他人也提供了一些可以使用python2.3的东西。也许是一个旧的NumPy?使用Python 2.3会限制您的选择(包括排除使用64位的选项)。这也是内存没有被释放回操作系统的主要原因:CPython中的内部对象分配器在之前无法将不再使用的内存返回到操作系统 如果可以,试着在2.7上运行该算法,看看纯粹使用最新版本的解释器可以获得什么好处(或者在这种迁移中会出现什么兼容性问题) 而且,正如其他人所建议的,优化您的数据结构。检查您执行的操作的算法复杂性