Michiel,<br><br>Thanks for the ideas.  I have implemented both of the approaches you describe and I am attaching a file that has all 3 approaches.  At this point, all 3 approaches work on OS X, Python 2.5 with wx 2.8/2.9.  What I most need to to find strenuous test cases that can probe which of these has the best performance?  Robert, could you run the Chaco test again with approaches 2 and 3 and try tuning the parameters (see the docstrings)?<br>
<br>Cheers,<br><br>Brian<br><br><div class="gmail_quote">On Thu, Jul 16, 2009 at 11:32 PM, Michiel de Hoon <span dir="ltr">&lt;<a href="mailto:mjldehoon@yahoo.com">mjldehoon@yahoo.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
Without monitoring stdin, you could do the following:<br>
<br>
while True:<br>
    run the event loop for a specified duration (say, 0.1 seconds)<br>
    check for input on stdin; if there is any: break<br>
<br>
But you can only do this if wx has such a time-out capability. If not, you can do the following:<br>
<br>
while True:<br>
    handle all accumulated events<br>
    check for input on stdin; if there is any: break<br>
    sleep for 0.1 seconds<br>
<br>
The sleep is important, otherwise the CPU is busy 100% of the time, which will drain your battery.<br>
<br>
This loop is essentially what you are doing in your current code, except that you&#39;re using Python/readline for the repeated calls into the hook function. It&#39;s better to have this loop explicitly inside your hook function, because of the variation in PyOS_InputHook behavior between different versions of Python/readline.<br>

<br>
--Michiel<br>
<div class="im"><br>
--- On Fri, 7/17/09, Brian Granger &lt;<a href="http://ellisonbg.net" target="_blank">ellisonbg.net</a>@<a href="http://gmail.com" target="_blank">gmail.com</a>&gt; wrote:<br>
<br>
&gt; From: Brian Granger &lt;<a href="http://ellisonbg.net" target="_blank">ellisonbg.net</a>@<a href="http://gmail.com" target="_blank">gmail.com</a>&gt;<br>
</div>&gt; Subject: Re: [matplotlib-devel] [IPython-dev] [Enthought-Dev] Ctypes based  prototype of PyOS_InputHook for wx 2.8 and 2.9<br>
&gt; To: &quot;Michiel de Hoon&quot; &lt;<a href="mailto:mjldehoon@yahoo.com">mjldehoon@yahoo.com</a>&gt;<br>
&gt; Cc: &quot;Robert Kern&quot; &lt;<a href="mailto:rkern@enthought.com">rkern@enthought.com</a>&gt;, <a href="mailto:enthought-dev@enthought.com">enthought-dev@enthought.com</a>, &quot;matplotlib development list&quot; &lt;<a href="mailto:matplotlib-devel@lists.sourceforge.net">matplotlib-devel@lists.sourceforge.net</a>&gt;, &quot;IPython Development list&quot; &lt;<a href="mailto:ipython-dev@scipy.org">ipython-dev@scipy.org</a>&gt;<br>

&gt; Date: Friday, July 17, 2009, 12:59 AM<br>
<div><div></div><div class="h5">&gt; Michiel,<br>
&gt;<br>
&gt; Thanks for the reply, this will help us to find a better<br>
&gt; approach.  According to one of the wx devs, Robin Dunn, wx<br>
&gt; currently does not have the ability to monitor stdin in its<br>
&gt; even loop without polling.  I guess there is a GSoC project<br>
&gt; to add this capability, but it is not there yet.  Any<br>
&gt; thoughts on how this could be done without monitoring<br>
&gt; stdin.  I will give the polling stdin approach a try<br>
&gt; though.<br>
&gt;<br>
&gt;<br>
&gt; Cheers,<br>
&gt;<br>
&gt; Brian<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; The chunkiness probably comes from the fact that<br>
&gt; inputhook_wx is called repeatedly. This is different from<br>
&gt; how PyOS_InputHook is being used in Tkinter, PyGTK, and the<br>
&gt; Mac OS X backend.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; Schematically, this is how the Tkinter/PyGTK/MacOSX event<br>
&gt; loops work:<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; 1) PyOS_InputHook is called when Python is waiting for the<br>
&gt; user to type in the next Python command.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; 2) The hook function sets up the event loop such that stdin<br>
&gt; is being monitored while the event loop is running.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; 3) The hook function then starts the event loop.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; 4) When input is available on stdin, the hook function<br>
&gt; exits the event loop, and returns.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; This is how the proposed Wx event loop currently works:<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; 1) PyOS_InputHook is called when Python is waiting for the<br>
&gt; user to type in the next Python command.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; 2) The hook function processes whatever events are<br>
&gt; available at the time.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; 3) The hook function returns.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; 4) If still no input is available on stdin, Python calls<br>
&gt; the hook function again via PyOS_InputHook after a timeout.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; I believe the timeout is 0.1 seconds by default. However,<br>
&gt; Python may not call PyOS_InputHook repeatedly at all; this<br>
&gt; depends on which Python version is being used, and the<br>
&gt; version of the readline library. In some configurations<br>
&gt; (particularly on Windows), PyOS_InputHook is called only<br>
&gt; once, so wx will freeze between Python commands.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; I am not familiar with wx, but there hopefully there is<br>
&gt; some way to monitor stdin while the event loop is running?<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --Michiel.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --- On Thu, 7/16/09, Brian Granger &lt;<a href="http://ellisonbg.net" target="_blank">ellisonbg.net</a>@<a href="http://gmail.com" target="_blank">gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; &gt; From: Brian Granger &lt;<a href="http://ellisonbg.net" target="_blank">ellisonbg.net</a>@<a href="http://gmail.com" target="_blank">gmail.com</a>&gt;<br>
&gt;<br>
&gt; &gt; Subject: Re: [matplotlib-devel] [IPython-dev]<br>
&gt; [Enthought-Dev] Ctypes based prototype of PyOS_InputHook for<br>
</div></div><div class="im">&gt; wx 2.8 and 2.9<br>
&gt;<br>
</div><div class="im">&gt; &gt; To: &quot;Robert Kern&quot; &lt;<a href="mailto:rkern@enthought.com">rkern@enthought.com</a>&gt;<br>
&gt;<br>
&gt; &gt; Cc: <a href="mailto:enthought-dev@enthought.com">enthought-dev@enthought.com</a>,<br>
&gt; &quot;matplotlib development list&quot; &lt;<a href="mailto:matplotlib-devel@lists.sourceforge.net">matplotlib-devel@lists.sourceforge.net</a>&gt;,<br>
&gt; &quot;IPython Development list&quot; &lt;<a href="mailto:ipython-dev@scipy.org">ipython-dev@scipy.org</a>&gt;<br>
&gt;<br>
&gt;<br>
&gt; &gt; Date: Thursday, July 16, 2009, 6:57 PM<br>
&gt;<br>
&gt; &gt; Robert,<br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt; &gt; Thanks for testing this so quickly.  Performance is<br>
&gt; one of<br>
&gt;<br>
&gt; &gt; the big issues that I am concerned about.  I will<br>
&gt; work on a<br>
&gt;<br>
&gt; &gt; Cython based version to see if that solves the<br>
&gt; problem.<br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt; &gt; Cheers,<br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt; &gt; Brian<br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
</div><div class="im">&gt; &gt; Works for me with wx 2.8.8.1 on OS X 10.5 and<br>
&gt;<br>
&gt; &gt; Chaco. Pan and zoom<br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt; &gt; interactions are substantially chunky, though. I do<br>
&gt; not see<br>
&gt;<br>
&gt; &gt; such<br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt; &gt; chunkiness with -wthread. It would be worth exploring<br>
&gt; a<br>
&gt;<br>
&gt; &gt; Cython<br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt; &gt; alternative to see if it is just ctypes and general<br>
&gt; Python<br>
&gt;<br>
&gt; &gt; overhead to<br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt; &gt; blame.<br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
</div><div class="im">&gt; &gt; --<br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt; &gt; Robert Kern<br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt; &gt; &quot;I have come to believe that the whole world is<br>
&gt; an<br>
&gt;<br>
&gt; &gt; enigma, a harmless<br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt; &gt; enigma that is made terrible by our own mad attempt<br>
&gt; to<br>
&gt;<br>
&gt; &gt; interpret it as<br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt; &gt; though it had an underlying truth.&quot;<br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt; &gt;   -- Umberto Eco<br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt; &gt; _______________________________________________<br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
</div><div class="im">&gt; &gt; IPython-dev mailing list<br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt; &gt; <a href="mailto:IPython-dev@scipy.org">IPython-dev@scipy.org</a><br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt; &gt; <a href="http://mail.scipy.org/mailman/listinfo/ipython-dev" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-dev</a><br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
</div><div><div></div><div class="h5">&gt; &gt; -----Inline Attachment Follows-----<br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt; &gt;<br>
&gt; ------------------------------------------------------------------------------<br>
&gt;<br>
&gt; &gt; Enter the BlackBerry Developer Challenge <br>
&gt;<br>
&gt; &gt; This is your chance to win up to $100,000 in prizes!<br>
&gt; For a<br>
&gt;<br>
&gt; &gt; limited time,<br>
&gt;<br>
&gt; &gt; vendors submitting new applications to BlackBerry App<br>
&gt;<br>
&gt; &gt; World(TM) will have<br>
&gt;<br>
&gt; &gt; the opportunity to enter the BlackBerry Developer<br>
&gt;<br>
&gt; &gt; Challenge. See full prize <br>
&gt;<br>
&gt; &gt; details at: <a href="http://p.sf.net/sfu/Challenge" target="_blank">http://p.sf.net/sfu/Challenge</a><br>
&gt;<br>
&gt; &gt; -----Inline Attachment Follows-----<br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt; &gt; _______________________________________________<br>
&gt;<br>
&gt; &gt; Matplotlib-devel mailing list<br>
&gt;<br>
&gt; &gt; <a href="mailto:Matplotlib-devel@lists.sourceforge.net">Matplotlib-devel@lists.sourceforge.net</a><br>
&gt;<br>
&gt; &gt; <a href="https://lists.sourceforge.net/lists/listinfo/matplotlib-devel" target="_blank">https://lists.sourceforge.net/lists/listinfo/matplotlib-devel</a><br>
&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
<br>
<br>
<br>
</div></div></blockquote></div><br>