<br><br><div class="gmail_quote">On Tue, Mar 19, 2013 at 12:35 PM, Marc Liyanage <span dir="ltr">&lt;<a href="mailto:marc@entropy.ch" target="_blank">marc@entropy.ch</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div style="word-wrap:break-word"><div><br></div><div>Thanks, that clears a few things up.</div><div><br></div><div>Suppose I only need one kernel, and I don&#39;t need interruption or restartability. Do you think it would be easy enough to change the code so that it avoids the fork/exec and stays in-process? That way, I could fire up a Python interpreter on a background thread, run the IPython kernel in that environment, and the Python code running in that kernel would then have full access to the host app&#39;s Objective-C object graph through the Obj-C &lt;-&gt; Python bridge. That is what I&#39;m after.</div>

<div><br></div><div>I am trying to figure out if it would be possible to make some kind of IPython Notebook-based debugging console for a Cocoa app. Such a console would be a very convenient and powerful way to inspect a Cocoa app at runtime. I should mention that this is unrelated to the IPython Notebook Mac that I am working on, this is just an idea for some other (Cocoa) projects, where IPython would be used just for its nice user interface, but would be an auxiliary thing to the app&#39;s main purpose.</div>

</div></blockquote><div><br></div><div>Ah, this makes more sense.  But I would actually do it a bit differently.  I would embed just the Kernel in your app, but then write a custom subclass of our notebook server that is actually much simpler than our NotebookApp.  You would remove the kernel management part (and possibly the notebook management part), since it can only talk to one kernel that it did not start.  Then I would start this simple webserver in a background process - your UI and Kernel can be in the same Cocoa process, even if the little tornado app that mediates their communication is in a different one.</div>

<div><br></div><div>-MinRK</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><div class="h5"><div>

<br></div><div><br></div><div><br></div><br><div><div>On Mar 19, 2013, at 9:33 AM, MinRK &lt;<a href="mailto:benjaminrk@gmail.com" target="_blank">benjaminrk@gmail.com</a>&gt; wrote:</div><br><blockquote type="cite"><div style="letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">

<br><br><div class="gmail_quote">On Mon, Mar 18, 2013 at 10:29 PM, Marc Liyanage<span> </span><span dir="ltr">&lt;<a href="mailto:marc@entropy.ch" target="_blank">marc@entropy.ch</a>&gt;</span><span> </span>wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<div><div><br>When I launch IPython notebook, a new process is launched for the kernel. I was wondering if it&#39;s possible to prevent that and instead run the kernel in a new thread of the same process. I can use the C API and instantiate multiple Python environments if that helps.<br>

<br>There are two reasons why I&#39;d like to avoid forking:<br><br>1.) On OS X, the process gets killed if it is already multithreaded, and for a GUI app that&#39;s always the case<br>2.) I&#39;d like to use the Objective-C bridge and let the Python code access Obj-C objects in the same process<br>

</div></div></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div><div><br>Is this possible, or is IPython fundamentally based on fork/exec?<br>

</div></div></blockquote><div><br></div><div>You would definitely need to start a new Python, because there can only be one Kernel in a given Python environment.  I&#39;ve never thought about multiple Pythons in a single process - you would definitely have problems when users interrupt or restart kernels, since that&#39;s based on process signals.</div>

<div><br></div><div>My guess is that this is probably not going to work without significant restructuring of IPython, which is unlikely to happen.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<div><div><br><br>_______________________________________________<br>IPython-User mailing list<br><a href="mailto:IPython-User@scipy.org" target="_blank">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>

</div></div></blockquote></div><br>_______________________________________________<br>IPython-User mailing list<br><a href="mailto:IPython-User@scipy.org" target="_blank">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></div>

</blockquote></div><br></div></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>