可能的修复方法来处理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。
我知道我的对象是内存消耗的主要原因,这使我想到两个问题:
-
在使用它们和gc之后,我“删除”了每个类对象,即使在脚本完成之后,python似乎也不想释放内存。是否有蛮力释放方法?
-
除列表以外,是否还有其他数据结构会消耗更少的内存并提高性能?我注意到Numpy是一个选项,但是我被迫使用Python 2.3,并且它似乎与Numpy不兼容。
以前,我每次想计算某种东西就需要读取数据库,这会使我的程序运行将近3个小时,但是现在将数据存储到一个类中时需要40分钟。因此,我的“客户”不想采用旧的方式。
提前致谢。
编辑:原始数据看起来像我之前描述的表,但是只能通过供应商提供的API进行访问。
编辑2:我的意图是为多个“数据源”创建C1类型的各种对象。所以我最终得到6个C1类型的对象,每个对象中都包含不同的数据
EDIT3:为了访问每个商店的商品价格列表,API具有一个以GetPrices(’Store
Name’)形式的函数。因此,有必要为每个商店调用此函数。因此,当前,我生成C1对象的代码具有一个巨大的For循环,该循环为每个Store调用此函数。
问题答案:
您可以尝试该array
模块,它是在Python 2.3中发布的。除此之外,您可能需要考虑使用适合此材料的数据库。