OSDir

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Python-Dev] Dealing with tone in an email


On 5/5/2018 9:45 PM, Chris Angelico wrote:
> On Sun, May 6, 2018 at 11:39 AM, Steven D'Aprano <steve at 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