[IPython-dev] [matplotlib-devel] [Enthought-Dev] Ctypes based prototype of PyOS_InputHook for wx 2.8 and 2.9

Michiel de Hoon mjldehoon at yahoo.com
Fri Jul 17 02:32:06 EDT 2009


Without monitoring stdin, you could do the following:

while True:
    run the event loop for a specified duration (say, 0.1 seconds)
    check for input on stdin; if there is any: break

But you can only do this if wx has such a time-out capability. If not, you can do the following:

while True:
    handle all accumulated events
    check for input on stdin; if there is any: break
    sleep for 0.1 seconds

The sleep is important, otherwise the CPU is busy 100% of the time, which will drain your battery.

This loop is essentially what you are doing in your current code, except that you're using Python/readline for the repeated calls into the hook function. It'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.

--Michiel

--- On Fri, 7/17/09, Brian Granger <ellisonbg.net at gmail.com> wrote:

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


      



More information about the IPython-dev mailing list