<div><span class="gmail_quote">wierd, hit the wrong key in gmail and away we go.... <br><br>do-over...<br><br>the actual &quot;intended&quot; message is below<br><br>On 2/9/08, <b class="gmail_sendername">Brian Granger</b> &lt;<a href="mailto:ellisonbg.net@gmail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">ellisonbg.net@gmail.com</a>&gt; wrote:</span><div>
<br>&lt;snip&gt; <br></div><span class="q"><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
 &gt; I have a patch I&#39;ll put together which integrates twisted with IPython<br> &gt; without polling... a slight hack starting with the ASPN code from way back.<br> &gt; There might be a much better approach given IPython1&#39;s direction but the<br>

 &gt; ASPN 1000hz polling loop didn&#39;t seem the way to go and I&#39;m not sure I get<br> &gt; where IPython1 is yet.&nbsp;&nbsp;I&#39;ll clean it up and send it in for opinions.<br> <br> <br>I have done some work on this front this week and finally have a nice<br>

 solution.&nbsp;&nbsp;There are two pieces:<br> <br> 1.&nbsp;&nbsp;I have created a simple class that runs the twisted reactor in the thread.</blockquote></span><div><br>I took the other route... spawned the gtk / IPython thread off and kept the main thread for twisted.&nbsp; Of course, its because I was starting with IPython and the ASPN code (included)<br>
<br></div><span class="q"><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> 2.&nbsp;&nbsp;The various parts of the twisted API can be called from ipython<br>

 using a function that recently made it into the twisted trunk, called<br> blockingCallFromThread.&nbsp;&nbsp;This function is not in twisted 2.5.0, so I<br> have put it into ipython1 until a new version of twisted is cut.</blockquote>

</span><div><br>Interesting, I was under the impression (perhaps
mistakenly) that&nbsp; reactor.callFromThread() was blocking... actually, I
think I&#39;ve passed return values through it... hmmm... need to go back
and check on that.<br><br>Brian then writes before I can resend this message<br><br><div style="margin-left: 40px;">&quot;&quot;We are using blockCallFromThread, which is very different from<br>
callFromThread. &nbsp;But, blockingCallFromThread does block. &nbsp;It basically<br>
lets you call a twisted using/deferred returning function and block<br>
for the result. &nbsp;This allows you to run twisted in a thread, but<br>
create blocking interfaces to twisted using things that are in turn<br>
usable from ipython.&quot;&quot;<br><br></div>OK, so now I need to read the code.&nbsp; Might even to do some thinking...<br><br>I&#39;ve included what I did cuz its trivial and only required a couplea lines to Shell... and a slight mod to the ASPN code (although I don&#39;t fully understand why a bunch of the ASPN stuff was necessary... didn&#39;t spend the time).<br>
<br>So, I&#39;ll do so.&nbsp; I was inverting the approach and intending to only call into twisted through the proper protections from the gui... I think you&#39;re taking a more general approach which I&#39;ll need to noodle on a bit.<br>
<br>
</div><div><div class="ea"><span id="e_11800d342c666f98_5">- Show quoted text -</span></div><span class="e" id="q_11800d342c666f98_5"><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
 This new arrangement is allowing us to develop very robust twisted<br> based clients that work in regular python/ipython sessions.&nbsp;&nbsp;This is a<br>
 massive improvement over anything else we have had before.<br> <br> Here are the relevant classes in ipython1:<br> <br> <a href="http://ipython.scipy.org/ipython/ipython/browser/ipython1/branches/ipython1-client-r3021/ipython1/kernel/twistedutil.py" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://ipython.scipy.org/ipython/ipython/browser/ipython1/branches/ipython1-client-r3021/ipython1/kernel/twistedutil.py</a><br>

 <br> These things are used here:<br> <br> <a href="http://ipython.scipy.org/ipython/ipython/browser/ipython1/branches/ipython1-client-r3021/ipython1/kernel/multiengineclient.py" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://ipython.scipy.org/ipython/ipython/browser/ipython1/branches/ipython1-client-r3021/ipython1/kernel/multiengineclient.py</a><br>

 <a href="http://ipython.scipy.org/ipython/ipython/browser/ipython1/branches/ipython1-client-r3021/ipython1/kernel/client.py" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://ipython.scipy.org/ipython/ipython/browser/ipython1/branches/ipython1-client-r3021/ipython1/kernel/client.py</a><br>

 <br> I should have this branch ready to merge into ipython1&#39;s trunk in a few days.<br> <br> Brian<br> <br> &gt; --<br> <br>&gt;<br> &gt; -glenn<br> &gt;<br> &gt; Glenn H. Tarbox, PhD<br> &gt; <a href="mailto:glenn@tarbox.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">glenn@tarbox.org</a><br>

 &gt;<br></blockquote></span></div></div><br>