I think there are a lot of caches, and rc.purge_results(&#39;all&#39;) doesn&#39;t quite get them all. You might try something like this<div><br></div><div><div>† † def clear_cache(rc, dview):</div><div>† † † † rc.purge_results(&#39;all&#39;) #clears controller</div>
<div>† † † † rc.results.clear()</div><div>† † † † rc.metadata.clear()</div><div>† † † † dview.results.clear()</div><div>† † † † assert not rc.outstanding, &quot;don&#39;t clear history when tasks are outstanding&quot;</div>
<div>† † † † rc.history = []</div><div>† † † † dview.history = []</div><div><br></div></div><div>Not sure if this will solve your problem, but I think I&#39;ve run into a similar problem, and I&#39;ve had some success with this.</div>
<div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Dec 14, 2012 at 7:05 AM, Johann Rohwer <span dir="ltr">&lt;<a href="mailto:jr@sun.ac.za" target="_blank">jr@sun.ac.za</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
To follow up on my own post, I have run the script below for a single<br>
chunk (600 parameter sets). The ipython process then consumes about<br>
2.5Gb of memory. I have then deleted the rc, lv, arl, ds and hdf<br>
objects in the ipython console where I ran the script. I have also<br>
imported gc and ran gc.collect(). However, the ipython process still<br>
uses 2.5Gb of memory. Only when I quit the ipython session is the<br>
memory freed.<br>
<br>
(Note that the ipcontroller and ipengine processes are behaving fine.)<br>
<br>
I am really puzzled by this...<br>
<span class="HOEnZb"><font color="#888888">--Johann<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
On Friday 14 December 2012 10:49:16 Johann Rohwer wrote:<br>
&gt; I&#39;m running a very large computation on a 110-node ipcluster with<br>
&gt; shared home directory and where the enginges are launched with ssh.<br>
&gt; Basically it&#39;s a total of 2349 runs which each produce a (512,50,23)<br>
&gt; dataset, so the total resulting data will be on the order of 6Gb.<br>
&gt; The problem I&#39;m experiencing is that the ipython process that runs<br>
&gt; the client just keeps increasing in memory and in the end kills the<br>
&gt; machine (the machine running the controller as well as the client<br>
&gt; has about 5Gb RAM including swap).<br>
&gt;<br>
&gt; To get around this I&#39;ve chuncked the computation so that the memory<br>
&gt; copes with one of the chunks. The problem is that the memory does<br>
&gt; not appear to be freed when rc.purge_results(&#39;all&#39;) is called (see<br>
&gt; below) and just keeps increasing in size. I&#39;m using HDF5 for data<br>
&gt; storage. I&#39;ve also tried playing around with simple jobs just<br>
&gt; calling one function and then running<br>
&gt; rc.purge_results(&#39;msg_id_of_async_result&#39;), but the result is still<br>
&gt; listed in rc.results and does not seem to be cleared. What am I<br>
&gt; doing wrong? Should I perhaps be deleting the rc object after each<br>
&gt; chunk and re-instantiating it?<br>
&gt;<br>
&gt; The essential points of the code producing the problem are included<br>
&gt; below.<br>
&gt;<br>
&gt; --Johann<br>
&gt;<br>
&gt; --------------------------- 8-&lt; ------------------------------------<br>
&gt; from h5py import File<br>
&gt; from IPython.parallel import Client<br>
&gt;<br>
&gt; def Analyze(p):<br>
&gt; † † &lt;some code&gt;<br>
&gt; † † return res # numpy array of shape (512,50,23)<br>
&gt;<br>
&gt; hdf = File(&#39;mod_res.hdf&#39;,&#39;w&#39;)<br>
&gt; s = (2349,512,50,23)<br>
&gt; ds = hdf.require_dataset(&#39;results&#39;,shape=s,dtype=&#39;f&#39;)<br>
&gt; hdf.flush()<br>
&gt;<br>
&gt; rc = Client()<br>
&gt; lv = rc.load_balanced_view()<br>
&gt;<br>
&gt; # pall is an input array of parameters for Analyze, length 2349<br>
&gt; chunk = 600 † † † † † † # chunk size for splitting up the<br>
&gt; computation n = len(pall)/chunk + 1 † # number of runs<br>
&gt;<br>
&gt; for j in range(n):<br>
&gt; † † arl = [] †# asynchronous results list<br>
&gt; † † ps = pall[j*chunk:(j+1)*chunk].copy()<br>
&gt;<br>
&gt; † † for i in range(len(ps)):<br>
&gt; † † † † arl.append(lv.apply(Analyze, ps[i]))<br>
&gt; † † lv.wait()<br>
&gt;<br>
&gt; † † for i in range(len(arl)):<br>
&gt; † † † † ar = arl[i].get()<br>
&gt; † † † † ds[j*chunk+i] = ar<br>
&gt; † † † † hdf.flush()<br>
&gt;<br>
&gt; † † rc.purge_results(&#39;all&#39;)<br>
&gt;<br>
&gt; hdf.close()<br>
&gt;<br>
<br>
<br>
E-pos vrywaringsklousule<br>
<br>
Hierdie e-pos mag vertroulike inligting bevat en mag regtens geprivilegeerd wees en is slegs bedoel vir die persoon aan wie dit geadresseer is. Indien u nie die bedoelde ontvanger is nie, word u hiermee in kennis gestel dat u hierdie dokument geensins mag gebruik, versprei of kopieer nie. Stel ook asseblief die sender onmiddellik per telefoon in kennis en vee die e-pos uit. Die Universiteit aanvaar nie aanspreeklikheid vir enige skade, verlies of uitgawe wat voortspruit uit hierdie e-pos en/of die oopmaak van enige lÍs aangeheg by hierdie e-pos nie.<br>

<br>
E-mail disclaimer<br>
<br>
This e-mail may contain confidential information and may be legally privileged and is intended only for the person to whom it is addressed. If you are not the intended recipient, you are notified that you may not use, distribute or copy this document in any manner whatsoever. Kindly also notify the sender immediately by telephone, and delete the e-mail. The University does not accept liability for any damage, loss or expense arising from this e-mail and/or accessing any files attached to this e-mail.<br>

</div></div><br>_______________________________________________<br>
IPython-User mailing list<br>
<a href="mailto:IPython-User@scipy.org">IPython-User@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/ipython-user" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
<br></blockquote></div><br></div>