[reportlab-users] Releasing memory used by Report Lab

Jerry Casiano jerrycasiano at gmail.com
Thu May 6 08:50:53 EDT 2010


On Thu, 2010-05-06 at 10:25 +0100, Robin Becker wrote:

Thanks for the quick reply.


> Anyhow I suspect you may have some preconceptions about how this stuff works.

> The rl toolkit doesn't control any memory directly it's all controlled by

> python. However, we do maintain some global variables that are used to store

> fonts and they may be the problem you're looking at. You can reset the state of

> the toolkit as much as we know how by calling the reportlab.rl_config._reset()

> function when you've finished with reportlab. In this case that's either at the

> end of the BuildPDF.__init__ or in the _build_pdf callback. So you need to do

> something like

>

>

> def _build_pdf(unused_widget):

> if FONTDIR:

> try:

> BuildPDF('Sample Sheet', FONTDIR, OUTPUT, PANGRAM)

> finally:

> from reportlab.rl_config import _reset

> _reset()

> #if exists(OUTPUT):

> #gtk.main_quit()

> return


Ah, so I was on the right track. I started by clearing the added fonts
from pdfmetrics._fonts, when that had no effect I found the _reset in
rl_config and gave that a shot. But it just looked wrong to me, probably
because of the leading _ so I was hoping there was something else I
missed.


> that should clean up the stuff that reportlab is holding onto. However, that

> doesn't guarantee that all the memory will be returned to the system; that's up

> to python and the way it & the system manage memory.


Yup, I was afraid of that.


> If you really want to free up this memory a better way to do this is to make

> your gui execute the document generation as a child process (see the subprocess

> library module documentation). That way all of the memory used by the subprocess

> will automatically be reclaimed when the process dies.


I'm starting to think that may end up being the cleanest way to do it
anyways.


Thanks again. :-)



More information about the reportlab-users mailing list