On 2013/08/06 10:08 AM, John McFarland wrote:
> I am trying to write some code that uses an input thread to check for user
> input while another thread is running some calculations (see example below).
> What I have noticed is that just including an import of pyplot (regardless
> of whether it is used by the code or not) causes the call to raw_input in
> the input thread to block the main thread. It works fine when I don't
> import pyplot. Importing pyplot is a consequence of other libraries that I
> need to use in the code, so I would like to find a way to make this work.
>
> I have python 2.7.3, matplotlib 1.2.0, and am currently using the GTKAgg
> backend. Any help is much appreciated.
>
> Here is the example code:
>
> import time
> import threading
Before the *first* import of pyplot, you need to have:
import matplotlib
matplotlib.use("agg")
or specify any other non-interactive backend. Alternatively, you can
specify the backend in a matplotlibrc file.
This assumes you don't actually need an interactive backend. If you do
need it, then I suspect you will need to change the strategy you are
using in your program, ideally eliminating the input thread. You might
use a gtk idle event callback to handle the user input, for example.
The problem here is that python threads and gui toolkits tend not to mix
well.
I suspect that raw_input is using the PyOS_InputHook, which is also
being used by gtk, so you are violating the prohibition against
gui-related activities being in more than one thread.
Eric
> import matplotlib.pyplot # Works fine if this is commented out
>
> def input_thread():
> raw_input('Press a key:')
> print "Input data received"
>
> thread = threading.Thread(target=input_thread)
> thread.start()
> time.sleep(.01)
> print
>
> # Main thread (e.g. a calculation that can take some time)
> for i in xrange(10):
> print i
> time.sleep(.5)
>
>
>
> --
> View this message in context:
> http://matplotlib.1069221.n5.nabble.com/Importing-pyplot-blocks-input-thread-tp41731.html
> Sent from the matplotlib - users mailing list archive at Nabble.com.
>
> ------------------------------------------------------------------------------
> Get 100% visibility into Java/.NET code with AppDynamics Lite!
> It's a free troubleshooting tool designed for production.
> Get down to code-level detail for bottlenecks, with <2% overhead.
> Download for free and get started troubleshooting in minutes.
> http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk
> _______________________________________________
> Matplotlib-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>
------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with <2% overhead.
Download for free and get started troubleshooting in minutes.
http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk
_______________________________________________
Matplotlib-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-users