[Python-Dev] Event loops, PyOS_InputHook, and Tkinter

Michiel Jan Laurens de Hoon mdehoon at c2b2.columbia.edu
Mon Nov 14 01:51:32 CET 2005

Martin v. Löwis wrote:

>Michiel Jan Laurens de Hoon wrote:
>>But there is another solution with threads: Can we let Tkinter run in a 
>>separate thread instead?
>Yes, you can. Actually, Tkinter *always* runs in a separate thread 
>(separate from all other threads).
Are you sure? If Tkinter is running in a separate thread, then why does 
it need PyOS_InputHook?
Maybe I'm misunderstanding the code in _tkinter.c, but it appears that 
the call to Tcl_DoOneEvent and the main interpreter (the one that reads 
the user commands from stdin) are in the same thread.

Anyway, if we can run Tkinter's event loop in a thread separate from the 
main interpreter, then we can avoid all interference with other event 
loops, and also improve Tkinter's behavior itself:
1) Since this event loop doesn't need to check stdin any more, we can 
avoid the busy-wait-sleep loop by calling Tcl_DoOneEvent without the 
TCL_DONT_WAIT flag, and hence get better performance.
2) With the event loop in a separate thread, we can use Tkinter from 
IDLE also.


Michiel de Hoon
Center for Computational Biology and Bioinformatics
Columbia University
1150 St Nicholas Avenue
New York, NY 10032

More information about the Python-Dev mailing list