Мы только что закончили очень большое обновление нашего приложения, созданного с помощью python2.5 и Tkinter, и появилась печально следующая ошибка:
alloc: invalid block: 06807CE7: 1 0 0
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
Мы видели это раньше иобычно это ошибка прерывателя Tcl, вызванная тем, что поток без графического интерфейса в любом случае пытается получить доступ к TK через Tkinter (TK не является потокобезопасным).Ошибка появляется при закрытии приложения после того, как прерыватель python завершил работу с нашим кодом.Эту ошибку очень трудно воспроизвести, и я думаю, что мне придется сканировать все потоки в системе, чтобы увидеть, получают ли они доступ к ТЗ, а не должны.
Я ищу магический трюк с питоном, чтобыпомогите с этим.Все используемые нами виджеты Tkinter сначала делятся на подклассы и наследуются от собственного базового класса Widget.
Имея это в виду, я ищу способ добавить следующую проверку в начало каждого метода в подклассах виджетов:
import thread
if thread.get_ident() != TKINTER_GUI_THREAD_ID:
assert 0, "Invalid thread accessing Tkinter!"
Декораторы как частичное решениеразум.Однако я не хочу добавлять декораторы к каждому методу вручную.Есть ли способ добавить декоратор ко всем методам класса, который наследуется от нашего базового класса Widget?Или есть лучший способ сделать все это?Или у кого-нибудь есть больше информации об этой ошибке?
enter code here