<br><br><div><span class="gmail_quote">On 8/2/07, <b class="gmail_sendername">Lisandro Dalcin</b> <<a href="mailto:dalcinl@gmail.com">dalcinl@gmail.com</a>> wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
using numpy-1.0.3, I believe there are a reference leak somewhere.<br>Using a debug build of Python 2.5.1 (--with-pydebug), I get the<br>following<br><br>import sys, gc<br>import numpy<br><br>def testleaks(func, args=(), kargs={}, repeats=5):
<br>    for i in xrange(repeats):<br>        r1 = sys.gettotalrefcount()<br>        func(*args,**kargs)<br>        r2 = sys.gettotalrefcount()<br>        rd = r2-r1<br>        print 'before: %d, after: %d, diff: [%d]' % (r1, r2, rd)
<br><br>def npy_asarray_1():<br>    a = numpy.zeros(5, dtype=int)<br>    b = numpy.asarray(a, dtype=float)<br>    del a, b<br><br>def npy_asarray_2():<br>    a = numpy.zeros(5, dtype=float)<br>    b = numpy.asarray(a, dtype=float)
<br>    del a, b<br><br>if __name__ == '__main__':<br>    testleaks(npy_asarray_1)<br>    testleaks(npy_asarray_2)<br><br><br>$ python npyleaktest.py<br>before: 84531, after: 84532, diff: [1]<br>before: 84534, after: 84534, diff: [0]
<br>before: 84534, after: 84534, diff: [0]<br>before: 84534, after: 84534, diff: [0]<br>before: 84534, after: 84534, diff: [0]<br>before: 84531, after: 84533, diff: [2]<br>before: 84535, after: 84536, diff: [1]<br>before: 84536, after: 84537, diff: [1]
<br>before: 84537, after: 84538, diff: [1]<br>before: 84538, after: 84539, diff: [1]<br><br>It seems npy_asarray_2() is leaking a reference. I am  missing<br>something here?. The same problem is found in C, using<br>PyArray_FROM_OTF (no time to go inside to see what's going on, sorry)
<br><br>If this is know and solved in SVN, please forget me.</blockquote><div><br>I don't have a debug build handy to test this on, but this might not be a reference leak. Since you are checking the count before and after each cycle, it could be that there are cycles being created that are subsequently cleaned up by the garbage collector.
<br><br>Can you try instead to look at the difference between the reference count at the end of each cycle with the reference count before the first cycle? If that goes up indefinitely, then it's probably a leak. If it bounces around or levels off, then probably not. You'd probably want to run a bunch of repeats just to be sure.
<br>regards,<br>-tim<br> </div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Regards,<br><br><br>--<br>Lisandro Dalcín<br>---------------
<br>Centro Internacional de Métodos Computacionales en Ingeniería (CIMEC)<br>Instituto de Desarrollo Tecnológico para la Industria Química (INTEC)<br>Consejo Nacional de Investigaciones Científicas y Técnicas (CONICET)<br>
PTLC - Güemes 3450, (3000) Santa Fe, Argentina<br>Tel/Fax: +54-(0)342-451.1594<br>_______________________________________________<br>Numpy-discussion mailing list<br><a href="mailto:Numpy-discussion@scipy.org">Numpy-discussion@scipy.org
</a><br><a href="http://projects.scipy.org/mailman/listinfo/numpy-discussion">http://projects.scipy.org/mailman/listinfo/numpy-discussion</a><br></blockquote></div><br><br clear="all"><br>-- <br>.  __<br>.   |-\<br>.<br>.  
<a href="mailto:tim.hochberg@ieee.org">tim.hochberg@ieee.org</a>