[vtkusers] release memory allocated in vtk from python

José M. Rodriguez Bacallao jmrbcu at gmail.com
Mon Jul 2 15:26:47 EDT 2012


so, a shallow copy is like a weakref in python no? I don't want to be
that minimalist (example 2) because example 2 does not copy any lookup
table, etc. How far is the git/master from what would be VTK 6.0?

On Mon, Jul 2, 2012 at 2:36 PM, David Gobbi <david.gobbi at gmail.com> wrote:
> The original question was asking how to free the reader and keep the
> data.  When you do "output=reader.GetOutput()", the output keeps a
> reference to the reader, so the reader will not be freed until the
> output is freed.  This is why it sometimes make sense to copy the
> output into a new vtkImageData object.
>
> In VTK 6, if you call "output=reader.GetOutput()" then the output does
> not keep a reference to the reader, so memory management is a bit
> easier.
>
> Python memory management does what it's supposed to: it deletes
> objects that aren't referred to by any other objects.  If an object is
> part of a pipeline, it won't be deleted until 1) it is disconnected
> from the pipeline or 2) there are no external references to any of the
> objects that make up the pipeline.
>
>  - David
>
>
> On Mon, Jul 2, 2012 at 12:12 PM, Jothybasu Selvaraj <jothybasu at gmail.com> wrote:
>> Won't the auto garbage collection/ memory management in python manage this?
>>
>>
>> On Mon, Jul 2, 2012 at 7:05 PM, David Gobbi <david.gobbi at gmail.com> wrote:
>>>
>>> A shallow copy should be sufficient:
>>>
>>> def test(filename):
>>>    r = vtkgdcm.vtkGDCMImageReader()
>>>    r.SetFileName(filename)
>>>    r.Update()
>>>    img = vtk.vtkImageData()
>>>    img.ShallowCopy(r.GetOutput())
>>>    return img
>>>
>>> Or, to be even more minimalist, copy just the pixel data and nothing else:
>>>
>>> def test(filename):
>>>    r = vtkgdcm.vtkGDCMImageReader()
>>>    r.SetFileName(filename)
>>>    r.Update()
>>>    img = vtk.vtkImageData()
>>>    img.CopyStructure(r.GetOutput())
>>>    img.GetPointData().PassData(r.GetOutput().GetPointData())
>>>    return img
>>>
>>>  - David
>>>
>>> On Mon, Jul 2, 2012 at 10:17 AM, Jothy <jothybasu at gmail.com> wrote:
>>> > I think the first one.
>>> >
>>> > Jothy
>>> >
>>> > On 02-Jul-2012, at 5:06 PM, José M. Rodriguez Bacallao
>>> > <jmrbcu at gmail.com> wrote:
>>> >
>>> >> hi folks, how to correctly release memory using vtk from python
>>> >> for example, which one of this three code snnipets release the memory
>>> >> allocated when reading the file:
>>> >>
>>> >> def test(filename):
>>> >>    r = vtkgdcm.vtkGDCMImageReader()
>>> >>    r.SetFileName(filename)
>>> >>    r.Update()
>>> >>    img = vtk.vtkImageData()
>>> >>    img.DeepCopy(r.GetOutput())
>>> >>    return img
>>> >>
>>> >> --------------------------------------------------------------------------
>>> >> def test(filename):
>>> >>    r = vtkgdcm.vtkGDCMImageReader()
>>> >>    r.SetFileName(filename)
>>> >>    r.Update()
>>> >>    return r.GetOutput()
>>> >>
>>> >> ---------------------------------------------------------------------------
>>> >> r = vtkgdcm.vtkGDCMImageReader()
>>> >> r.SetFileName(filename)
>>> >> r.Update()
>>> >> img = r.GetOutput()
>>> >> img = None
>>> >> del img
>>> >> r = None
>>> >> del r



More information about the vtkusers mailing list