Hi dev list,<br>I thought this place more appropriate as I am looking to change the internals of IPKernel, or perhaps just extend it. Perhaps I am simply not experienced enough with the code and this is already done and obvious, forgive me in this case.<br>
<br>Say I have a typical python gui that creates some python objects, modifies them, etc...Now instead of just running this code directly, say I want to run this inside the IPKernel so that all of its data can then be inspected by someone connecting an qtconsole to it.<br>
<br>i.e. I envision something like this rough pseudocode below:<br><br>&gt;from ipython.zmq.ipkernel import *<br>&gt;<br>&gt;class someGui():<br>&gt;<br>&gt;  controller = Controller()<br>&gt;<br>&gt; <br>
&gt;<br>&gt;  def onSomeEvent(self):<br>&gt;<br>&gt;  self.controller.doSomething()<br>&gt;<br>&gt; <br>&gt;<br>&gt; class Controller():<br>&gt;<br>&gt; <br>&gt;<br>&gt;  def __init__(self):<br>
&gt;<br>&gt; self.app = IPKernelApp.instance()<br>&gt;<br>&gt; self.app.initialize()<br>&gt;<br>&gt; self.app.start() //make this a returning call so that this doesnt hang forever.<br>&gt;<br>&gt; <br>&gt;<br>&gt; def doSomething(self):<br>
&gt;<br>&gt;  self.app. execRequest (a = 5)<br>&gt;<br>&gt; <br>&gt;<br>&gt; def doSomethingElse(self):<br>&gt;<br>&gt;  return self.app.evalRequest (a)<br>&gt;<br>&gt; <br>&gt;<br>&gt; def main():<br>
&gt;<br>&gt; gui = someGui()<br>&gt;<br>&gt; gui.show()<br>&gt;<br>&gt; ____________________<br>Now somewhere else, someone starts a qtconsole and type in a to check that its 5.<br><br>Its fairly obvious that the implementation of qtconsole already does something similar, but it was my understanding that it communicates to the kernel through zmq (perhaps I am mistaken?) In my example, I kind of want to give this gui special status, i.e. it is in the same process as the ipkernel itself (maybe another thread) but it would talk to ipkernel directly instead of via zmq.<br>
So basically my 2 basic questions are:<br><br>1. How to make the ipkernelapp.start() non blocking, or dispatch it as another thread that I can call additional functions on.<br><br>2. How to make a simplified exec/evalRequest a blocking call that would evaluate the code on the spot and return or maybe after waiting to acquiring some lock, i.e. not interweaved as an iteration of the ipkernel event loop to make it as responsive as a regular application as possible.<br>
<br>3. How to create the option to broadcast any errors(or print statements) to connected qtconsole instances.<br><br>If anyone can provide some clues as how to get started towards this direction, it would be greatly appreciated.<br>
<br>-i<br><br>-- <br>Ivan<br>