<div class="gmail_quote">On 25 September 2012 19:08, Junkshops <span dir="ltr"><<a href="mailto:junkshops@gmail.com" target="_blank">junkshops@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000"><div class="im">
<blockquote type="cite">
<div><br>
</div>
<div>Can you give an example of how these data structures look
after reading only the first 5 lines?</div>
</blockquote></div>
Sure, here you go:<br>
<br>
In [38]: mpef._ustore._store<br>
Out[38]: defaultdict(<type 'dict'>, {'Measurement':
{'8991c2dc67a49b909918477ee4efd767':
<micropheno.exchangeformat.Exceptions.FileContext object at
0x2f0fe90>, '7b38b429230f00fe4731e60419e92346':
<micropheno.exchangeformat.Exceptions.FileContext object at
0x2f0fad0>, 'b53531471b261c44d52f651add647544':
<micropheno.exchangeformat.Exceptions.FileContext object at
0x2f0f4d0>, '44ea6d949f7c8c8ac3bb4c0bf4943f82':
<micropheno.exchangeformat.Exceptions.FileContext object at
0x2f0f910>, '0de96f928dc471b297f8a305e71ae3e1':
<micropheno.exchangeformat.Exceptions.FileContext object at
0x2f0f550>}})<br></div></blockquote><div><br></div><div>Have these exceptions been raised from somewhere before being stored? I wonder if you're inadvertently keeping execution frames alive. There are some problems in CPython with this that are related to storing exceptions.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div bgcolor="#FFFFFF" text="#000000">
<br>
In [39]:
mpef._ustore._store['Measurement']['b53531471b261c44d52f651add647544'].typeStr<br>
Out[39]: 'Measurement'<br></div></blockquote><div><br></div><div>Seeing how long these hex strings are, I'm confident that you would save a significant amount of memory by converting them to int.</div><div>
</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div bgcolor="#FFFFFF" text="#000000">
<br>
In [40]:
mpef._ustore._store['Measurement']['b53531471b261c44d52f651add647544'].lineNumber<br>
Out[40]: 5<br>
<br>
In [41]: mpef._ustore._idstore<br>
Out[41]: defaultdict(<class
'micropheno.exchangeformat.KBaseID.IDStore'>, {'Measurement':
<micropheno.exchangeformat.KBaseID.IDStore object at
0x2f0f950>})<br>
<br>
In [43]: mpef._ustore._idstore['Measurement']._SIDstore<br>
Out[43]: defaultdict(<function <lambda> at 0x2ece7d0>,
{'emailRemoved': defaultdict(<function <lambda> at
0x2c4caa0>, {'microPhenoShew2011': defaultdict(<type
'dict'>, {0: {'MLR_124572462':
'8991c2dc67a49b909918477ee4efd767', 'MLR_124572161':
'7b38b429230f00fe4731e60419e92346', 'SMMLR_12551352':
'b53531471b261c44d52f651add647544', 'SMMLR_12551051':
'0de96f928dc471b297f8a305e71ae3e1', 'SMMLR_12550750':
'44ea6d949f7c8c8ac3bb4c0bf4943f82'}})})})<br></div></blockquote><div><br></div><div>Also I think lambda functions might be able to keep the frame alive. Are they by any chance being created in a function that is called in a loop?</div>
<div><br></div><div><div>>>> def f():</div><div>... x = 4</div><div>... return lambda : x</div><div>...</div><div>>>> g = f()</div><div>>>> g() # Accesses local variable from kept-alive frame</div>
<div>4</div><div>>>> x</div><div>Traceback (most recent call last):</div><div> File "<stdin>", line 1, in <module></div><div>NameError: name 'x' is not defined</div></div><div><br></div>
<div>Oscar</div></div>