On 5/5/2018 9:45 PM, Chris Angelico wrote:
On Sun, May 6, 2018 at 11:39 AM, Steven D'Aprano <st...@pearwood.info> wrote:
On Sun, May 06, 2018 at 11:09:21AM +1000, Chris Angelico wrote:

What exactly didn't work? I don't understand.

https://bugs.python.org/issue33412



I've read it and I still don't fully understand the problem.

Chris this is an excellent series of questions. I think I have enough knowledge to answer somewhat adequately. This is partly thanks to things people like you and Steven have posted on python-list abouts threads, deadlocks, and volatile conditions, and partly thanks to Ivan's contribution on the thread above and https://bugs.python.org/issue33257.

Is it ALL of Tkinter that fails in threaded mode?

No. It is non-threaded tcl that fails in threaded mode, along with tkinter's attempt to make non-thread tcl work anyway. There are at least two different cases.

Ivan has clarified the following.
1. Tcl has a 'threads' compile switch.
2. The default changed from 'off' for 8.5 and before to 'on' for 8.6.
3. When compiled with thread support, the resulting library file has t suffix. 4. The Windows installer for 2.7 installs tcl85.dll while at least 3.6 and later install tcl86t.dll. Hence things work that did not work before. 5. Changing 2.7 to tcl85t.dll and tk85t.dll could break 3rd code that interfaces to the .dlls. _tkinter is written with #ifdefs to accommodate thread or no thread compiles, but any code written just for the no-t version would could fail with the t version.

Is it just certain specific calls?

33257 is about calling widget modification methods from threads. The _tkinter code to make this work with non-t tcl fails haphazardly in maybe 1 in 10000 calls. Ivan signed the CA and submitted a PR which he claims fixes the Python and Tcl locking. Serhiy has not reviewed this yet.

33412 is about calling event_generate from threads. For non-t tcl and more than one thread making such calls, the example fails immediately. With thread tcl, the same example ran until it deadlocked during shutdown cleanup. I found one way to almost certainly avoid it. Ivan found a better way, which I am thinking about making part of a new doc section on tkinter and threads.

Are there calls that fail in single-threaded programs?

This is a different issue. I don't know of much of anything except a few things on MacOS, due to tcl/tk bugs or Apple changing the graphics system.

If the given test-case is the only thing that fails,
Neither fails with properly written code when using the thread build of tcl.

>  it's a horrific exaggeration to say that Tkinter is broken.

Yep. But I don't care any more what Ivan writes here. I am sorry he lost a job bid or whatever. I appreciate what he has contributed on the tracker, in his more rational mode.

--
Terry Jan Reedy

_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to