小能豆

解决 Python 内存使用问题的可能方法

py

我有以下课程:

 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

STORE 和 ITEMS 列表如下所示:

商店:[‘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 访问。

EDIT2:我的目的是为多个“数据源”创建各种 C1 类型的对象。因此,我最终会得到 6 个 C1 类型的对象,每个对象都包含不同的数据

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


阅读 24

收藏
2024-12-08

共1个答案

小能豆

您可以尝试该array模块,它出现在 Python 2.3 中。除此之外,您可能还想研究使用适当的数据库来处理这些内容。

2024-12-08