Number of objects grows unbouned...Memory leak

ptb petertbrady at gmail.com
Sat May 3 10:40:14 EDT 2014


Turns out one of the libraries I am using has a cache system.  If I shut if off then my problem goes away...

On Saturday, May 3, 2014 7:15:59 AM UTC-6, ptb wrote:
> Hello all,
> 
> 
> 
> I'm using Python 3.4 and am seeing the memory usage of my program grow unbounded.  Here's a snippet of the loop driving the main computation
> 
> 
> 
> opt_dict = {'interior':cons_dict['int_eq'],'lboundary':cons_dict['lboundary'],
> 
>             'rboundary':cons_dict['rboundary'],
> 
>             'material_props':{'conv':0.9,'diff':0.01},
> 
>             'file_ident':ident,'numeric':True,'file_set':files}
> 
> 
> 
> # this produces roughly 25,000 elements
> 
> args = product(zip(repeat(nx[-1]),ib_frac),nx,subs)
> 
> 
> 
> for i,arg in enumerate(args):
> 
>     my_func(a=arg[0],b=arg[1],c=arg[2],**opt_dict)
> 
>     gc.collect()
> 
>     print(i,len(gc.get_objects()))
> 
> 
> 
> A few lines of output:
> 
> 
> 
> progress....
> 
> 0 84883
> 
> 1 95842
> 
> 2 106655
> 
> 3 117576
> 
> 4 128444
> 
> 5 139309
> 
> 6 150172
> 
> 7 161015
> 
> 8 171886
> 
> 9 182739
> 
> 10 193593
> 
> 11 204455
> 
> 12 215284
> 
> 13 226102
> 
> 14 236922
> 
> 15 247804
> 
> 16 258567
> 
> 17 269386
> 
> 18 280213
> 
> 19 291032
> 
> 20 301892
> 
> 21 312701
> 
> 22 323536
> 
> 23 334391
> 
> 24 345239
> 
> 25 356076
> 
> 26 366923
> 
> 27 377701
> 
> 28 388532
> 
> 29 399321
> 
> 30 410127
> 
> 31 420917
> 
> 32 431732
> 
> 33 442489
> 
> 34 453320
> 
> 35 464147
> 
> 36 475071
> 
> 37 485593
> 
> 38 496068
> 
> 39 506568
> 
> 40 517040
> 
> 41 527531
> 
> 42 538099
> 
> 43 548658
> 
> 44 559205
> 
> 45 569732
> 
> 46 580214
> 
> 47 590655
> 
> 48 601165
> 
> 49 611656
> 
> 50 622179
> 
> 51 632645
> 
> 52 643186
> 
> 53 653654
> 
> 54 664146
> 
> ...
> 
> 
> 
> As you can see the number of objects keep growing and my memory usage grows proportionately.  Also, my_func doesn't return any values but simply writes data to a file.
> 
> 
> 
> I was under the impression that this sort of thing couldn't happen in Python.  Can someone explain (1) how this is possible? and (2) how do I fix it?
> 
> 
> 
> Hopefully that's enough information.
> 
> 
> 
> Thanks for your help,
> 
> Peter




More information about the Python-list mailing list