可能的修复方法来处理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

该类的目的是将所有项目存储在不同的商店及其价格中。项目按字母数字顺序排序,如果商店中不存在该项目,则价格显示为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’]

对于PRICE列表,它是一个多维列表,通过指定商店索引和商品索引,它可以为您提供指定商店中指定商品的价格(例如,price [0]
[0]将使您在S1处获得item1的价格这是15)。

将所有这些数据放在一个类中,然后运行“报告”并进行一些“复杂”的计算。

我遇到了一个问题,即我正在根据不同的表创建类对象,而根据Windows任务管理器,python的内存使用量几乎达到了1.8 GB。

我知道我的对象是内存消耗的主要原因,这使我想到两个问题:

  1. 在使用它们和gc之后,我“删除”了每个类对象,即使在脚本完成之后,python似乎也不想释放内存。是否有蛮力释放方法?

  2. 除列表以外,是否还有其他数据结构会消耗更少的内存并提高性能?我注意到Numpy是一个选项,但是我被迫使用Python 2.3,并且它似乎与Numpy不兼容。

以前,我每次想计算某种东西就需要读取数据库,这会使我的程序运行将近3个小时,但是现在将数据存储到一个类中时需要40分钟。因此,我的“客户”不想采用旧的方式。

提前致谢。

编辑:原始数据看起来像我之前描述的表,但是只能通过供应商提供的API进行访问。

编辑2:我的意图是为多个“数据源”创建C1类型的各种对象。所以我最终得到6个C1类型的对象,每个对象中都包含不同的数据

EDIT3:为了访问每个商店的商品价格列表,API具有一个以GetPrices(’Store
Name’)形式的函数。因此,有必要为每个商店调用此函数。因此,当前,我生成C1对象的代码具有一个巨大的For循环,该循环为每个Store调用此函数。


问题答案:

您可以尝试该array模块,它是在Python 2.3中发布的。除此之外,您可能需要考虑使用适合此材料的数据库。