[SciPy-dev] gui_thread issue

Fernando Perez Fernando.Perez at colorado.edu
Sun Nov 7 23:43:22 CST 2004


eric jones wrote:
>>One more thing.  Now that I have the necessary "readline" module in my 
>>site-packages to make ipython colorize correctly, Ctrl-Z no longer 
>>works to exit a standard python shell or ipython.  Has anyone else had 
>>similar problems?  Ctrl-C sometimes exits ipython, sometimes not.  I 
>>use "import sys;sys.exit()" to exit standard python prompts.
>>
> 
> I was a little off here.  Ctrl-Z doesn't work with either ipython.py or 
> the standard python shell.
> 
> In ipython, Ctrl-C generates a keyboard interrupt in ipython.py *unless* 
> I have imported gui_thread and started it.  Then it kills the session. 
> 
> Here is an example of what I get:
> 
> C:\wrk\converge\src\lib\enthought\tvtk\examples>ipython.py
> Python 2.3.3 (#51, Feb 16 2004, 04:07:52) [MSC v.1200 32 bit (Intel)]
> <snip>
> In [1]: <Ctrl-C>
> KeyboardInterrupt
> In [1]: import gui_thread
> In [2]: <Ctrl-C>
> KeyboardInterrupt
> In [2]: gui_thread.start()\
> In [3]: <Ctril-C>
> C:\wrk\converge\src\lib\enthought\tvtk\examples>
> 
> So, it looks like gui_thread changes the way <Ctrl-C> behaves.  Anyone 
> know of a fix for this (and the Ctrl-Z issue)?

gui_thread (or one of the modules it pulls in) might be installing a signal 
handler to trap SIGINT.  Note that under linux, I don't see this behavior at 
all: Ctrl-C works as expected both before AND after starting gui_thread.  So 
it may be a windows thing.  Could you try the following please:

In [1]: import signal

In [2]: signal.getsignal(signal.SIGINT)
Out[2]: <built-in function default_int_handler>

In [3]: import gui_thread

In [4]: gui_thread.start()

In [5]: signal.getsignal(signal.SIGINT)
Out[5]: <built-in function default_int_handler>

This will tell you, before and after gui_thread starts, what the SIGINT signal 
handler is, and if gui_thread changed it in any way.  If there is no change in 
the return value of the SIGINT handler, then it means that gui_thread is 
somehow messing up signal handling across threads (which wouldn't surprise me, 
after the nasty hacks I've just gone through in ipython precisely to deal with 
signals and threads for matplotlib).

One thing I've learned recently, is that in python, the moment you throw 
threads in the picture, both signals and exceptions become a hell of a pain.

Cheers,

f




More information about the Scipy-dev mailing list