Python:内存泄漏

时间:2014-02-03 10:12:14

标签: python memory memory-leaks garbage-collection garbage

我正在使用Python在LCD显示器(Raspberry Pi)上显示位图图像。这很有效,但似乎我创造了一个巨大的内存泄漏。 这段代码似乎是罪魁祸首:

def displayBitmap(self):
    spi.open(0,0)
    f = open("data/565.bmp", "rb")
    imgdata = f.read()
    f.close()

    self.setAddress(0, 0, LCD_WIDTH-1, LCD_HEIGHT-1)
    k = 0
    for i in range(0, (LCD_WIDTH*LCD_HEIGHT)):
        dt = (ord(imgdata[k]) | (ord(imgdata[k+1]) << 8))

        self.spiOutData(dt,2)
        k +=2
    imgdata = None
    spi.close()

...

def spiOutData(self, data, bytes=1):
    io.digitalWrite(15, io.LOW)
    io.digitalWrite(16, io.HIGH)

    io.digitalWrite(self.dcPin, io.HIGH)

    if (bytes == 1):
        spi.xfer2([(data)])
    else:
        spi.xfer2([(data>>8)])
        spi.xfer2([(data)])

它运行良好一段时间,但在某些时候由于内存不足而终止。我的猜测是imgdata的内容永远不会被删除,但我的Python知识似乎太糟糕了,无法找到原因。 你能给我一个提示吗?非常感谢你。

1 个答案:

答案 0 :(得分:0)

所以这就是我发现的:

  • py-spidev模块(或spidev本身的某些部分)似乎是问题所在。
  • 除了内存泄漏,py-spidev非常慢

我现在已经摆脱py-spidev并直接通过文件句柄写入/dev/spidev0.0。不再过多的内存使用和SPI通信现在需要大约两秒钟,这大约是它之前所需时间的十分之一。