This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author epaine
Recipients epaine, gpolo, obserience, pitrou, serhiy.storchaka
Date 2020-06-15.10:36:14
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1592217374.72.0.587861063151.issue39093@roundup.psfhosted.org>
In-reply-to
Content
My initial thoughts were just to give the standard lecture on why "tkinter + threads = bad". However, looking again at the problem, the async handler error causes the Python interpreter to crash, which, no matter how frowned upon the code is, shouldn't happen.

Ultimately, the issue is that a Tkapp object is being deleted in any thread other than the one it was created in. I believe there are two parts to the solution, both of which are for the Tkapp object in the _tkinter module (as there is no guarantee that the user will go through the standard tkinter module):

1. If a Tkapp object is created in a thread other than the main and it is made global, it is deleted in the main thread as part of the interpreter finalisation, not when the thread is finalising. I propose that the Tkapp object can only be created in the main thread, helping with part 2.
2. The Tkapp object 'refuses' to delete in a thread other than main, and instead gets collected on interpreter finalisation if needed (in the main thread).

I don't know how to implement this, but if someone has some ideas, I am more than willing to help solidify them into a PR.

Antoine, I hope you are the right person to add to the nosy for this (apologies if not).
History
Date User Action Args
2020-06-15 10:36:14epainesetrecipients: + epaine, pitrou, gpolo, serhiy.storchaka, obserience
2020-06-15 10:36:14epainesetmessageid: <1592217374.72.0.587861063151.issue39093@roundup.psfhosted.org>
2020-06-15 10:36:14epainelinkissue39093 messages
2020-06-15 10:36:14epainecreate