<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="im">
&gt; 1.  We muck with sys.excepthook, sys.displayhook, sys.ipcompleter,<br>
&gt; sys.stdin, sys.stdout<br>
<br>
</div>That doesn&#39;t have to be a problem. That&#39;s why I wrote all of those *Trap<br>
classes. And as far as I can tell, sys.ipcompleter is entirely from IPython, not<br>
Python itself. I have no idea why it&#39;s in the sys namespace in the first place.<br>
<div class="im"></div></blockquote><div class="im"><br>Yes, your trap classs would help manage all of this for sure.  But we have<br>a long way to go in the core before the mucking with sys is done in a safe manner.<br><br>
As far as ipcompleter, I haven&#39;t tracked down exactly why it is there.  But I do know it is used<br>from that location in the embedded shell.  But, a proper API should fix that.<br><br>
&gt; 2.  We push a number of thing into __builtin__ that point to the<br>
&gt; specific InteractiveShell:<br>
&gt;<br>
&gt; __IPYTHON__<br>
&gt; exit<br>
&gt; quit<br>
&gt; reload<br>
<br>
</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Could be Trapped, as well.<br>
<div class="im"></div></blockquote><div><br>Yes.<br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="im"><br>
&gt; 3.  Because of severe cycles in our object graph, an InterativeShell<br>
&gt; instances can&#39;t be<br>
&gt; garbage collected.<br>
<br>
</div>Or rather, they *are* garbage collected and not __del__eted.<br>
<div class="im"></div></blockquote><div class="im"><br>I have spent some time with gc and muppy/pympler and as of right now, it is<br>not even garbage collected.  I create and destroy an InteractiveShell instance <br>from python (not IPython) and muppy/gc still list it in the live objects.<br>
<br>I haven&#39;t had a change to figure out who the offending ref holder is - there <br>are dozens of them.<br> <br>
&gt; So, should we actually make InteractiveShell a singleton?  There are a<br>
&gt; couple of different<br>
&gt; options:<br>
&gt;<br>
&gt; 1.  One InteractiveShell per process - a true singleton.<br>
&gt; 2.  One InteractiveShell at a time, but multiple (serial) ones in a process.<br>
&gt; 3.  Multiple, sumultanous InteractiveShells<br>
&gt;<br>
&gt; The only subtlety is that some level of nesting is possible.<br>
&gt;<br>
&gt; Just a note: it will take a lot of refactoring to really implement any<br>
&gt; of the above options.<br>
&gt; But, I want to know what we are aiming for as this issue affects many<br>
&gt; design choices.<br>
<br>
</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">#3 would be really, really desirable, and I think it is feasible.<br>
</blockquote><div><br>I agree, I think it will take some time to refactor things in place and get this to <br>be possible.<br><br>Cheers,<br><br>Brian<br><br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
--<br>
Robert Kern<br>
<br>
&quot;I have come to believe that the whole world is an enigma, a harmless enigma<br>
  that is made terrible by our own mad attempt to interpret it as though it had<br>
  an underlying truth.&quot;<br>
   -- Umberto Eco<br>
<br>
_______________________________________________<br>
IPython-dev mailing list<br>
<a href="mailto:IPython-dev@scipy.org">IPython-dev@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/ipython-dev" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-dev</a><br>
</blockquote></div><br>