[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
Michiel de Hoon
Center for Computational Biology and Bioinformatics
1150 St Nicholas Avenue
New York, NY 10032
More information about the Python-Dev