[Image-SIG] Enormous memory usage using PIL
Klamer Schutte
Schutte@fel.tno.nl
Fri, 21 Dec 2001 11:29:40 +0100
Hi,
On my RedHat 7.2 Linux / Python 1.5.2 / Imaging 1.1.2 system I tend to use
a lot of memory with PIL Image's, and ImageTk.Photoimage's in a tkinter Text
window. Having in total 3x40x1000 = 120000 pixels stored my process grows to
200 Mb python size, with 80 Mb swapped in, and also a resident X (24 bits)
server size of 80 Mb resident.
I would expect something like 120000*24bits == less then 0.5 Mb usage due to
this
data.
Anyone has an idea what is going on, and how to correct it?
Klamer
Relevant code fragments:
NrGrids = 40 # 40 grid cells per row
class ConfView:
# ConfView provides a view of confidence data
def __init__(self, master, sensor):
self.sensor = sensor
self.master = master
self.frame = Frame(master)
self.frame.pack(side=LEFT)
Label(self.frame,text=sensor.name).pack(side=TOP)
self.text = Text(self.frame, width=20)
self.text.pack()
im = Image.open('tno-logo.bmp')
self.imtk = ImageTk.PhotoImage(im)
self.text.image_create(END, image=self.imtk)
# Label(self.frame,image=self.imtk,bd=0).pack(side=TOP)
self.text.insert( END, 'begin\n' )
self.cur = 0
self.master.after(delay_ms, self.poll)
self.conf_data_images = { }
def get_data(self, low, hi, data):
low = int(low)
hi = int(hi)
if (low != self.cur):
app.add_text('ConfView::get_data: low ' + `low` + ' != cur ' +
`cur` + '\n', LOG_ERROR)
im = Image.new("L", (NrGrids, hi-low))
cnt = 0
palette = [ ]
while cnt < 256:
palette.append(cnt)
cnt = cnt + 1
while cnt < 768:
palette.append(0)
cnt = cnt + 1
# print 'image data:', data
im.fromstring(data)
im.putpalette(palette)
# im.show()
try:
imtk = ImageTk.PhotoImage(im)
self.conf_data_images[(low,hi)] = imtk
self.text.image_create(END, image=imtk)
self.text.insert( END, '\n' )
self.poll()
except TclError, err:
app.add_text('ConfView for ' + self.sensor.name + ' closed\n',
LOG_STRANGE)
--
Klamer Schutte, E-mail: Schutte@fel.tno.nl
Electro-Optical Systems, TNO Physics and Electronics Laboratory
Tel: +31-70-3740469 -- Fax: +31-70-3740654 -- Mobile: +31-6-51316671