I don't see any obvious pygame reason. What if you remove numpy? -- if it
still leaks, that would be interesting.

On Dec 20, 2016 7:42 AM, "Christoph Stahl" <daspfanni2...@gmx.net> wrote:

>
> Hello,
>
> I use pygame to visualize locally on my computer what otherwise can be
> viewed on my self build led matrix that is driven by a raspberry pi.
>
> When I do not use the local display, but the LED matrix, the memory used
> by the python process stays flat.
>
> But when I use the local pygame display - memory usage is steadily
> increasing.
>
> The whole code is on github: https://github.com/stahlfabrik/RibbaPi
>
> Here is an example script, that mimics my code and leaks memory as well. I
> think the code is leaked by pygame - or my usage of pygame.
>
> ###
>
> #!/usr/bin/env python3
>
> import numpy as np
> import pygame
> import sys
>
>
> class Computer():
>     def __init__(self, width=16, height=16, margin=5, size=30):
>         self.width = width
>         self.height = height
>         self.margin = margin
>         self.size = size
>
>         self.window_size = (width * size + (width + 1) * margin,
>                             height * size + (height + 1) * margin)
>
>         pygame.init()
>         self.surface = pygame.display.set_mode(self.window_size)
>         pygame.display.set_caption("Leak {}x{}".format(width, height))
>
>         self.buffer = np.array([255, 255, 255] * width * height,
>                                dtype=np.uint8).reshape(height, width, 3)
>
>     def show(self, gamma=False):
>         for event in pygame.event.get():
>             if event.type == pygame.QUIT:
>                 pygame.quit()
>                 sys.exit()
>
>         self.surface.fill((0, 0, 0))
>
>         it = np.nditer([self.buffer[:, :, 0],
>                         self.buffer[:, :, 1],
>                         self.buffer[:, :, 2]], flags=['multi_index'])
>         while not it.finished:
>             color = (it[0], it[1], it[2])
>             (row, column) = it.multi_index
>             pygame.draw.rect(self.surface, color,
>                              [(self.margin + self.size) * column +
> self.margin,
>                               (self.margin + self.size) * row +
> self.margin,
>                               self.size,
>                               self.size])
>             it.iternext()
>
>         pygame.display.update()
>
>
> if __name__ == "__main__":
>     import time
>     display = Computer()
>     while True:
>         display.show()
>         time.sleep(1/60)
> ###
>
> OS is mac OS 10.12.2. python3 is from homebrew Python 3.5.2. From pip3
> there is numpy==1.11.3 and pygame==1.9.2.
>
> Any hint on what goes wrong here is greatly appreciated!
>
> Best regards,
> Chris
>

Reply via email to