LINUX.ORG.RU

История изменений

Исправление byko3y, (текущая версия) :

Tcl - это язык высокого уровня. Что-то вроде lisp, но без скобок и с другим подходом к синтаксису

Спасибо за объяснение, но тикль совершенно не похож на лисп.

А то, про что ты говоришь - его БИБЛИОТЕКА, которая называется Tk. Которая адаптирована для Python в виде Tkinter

Дело в том, что проклятый питон и Tk/Tcl имеют один общий главный поток, в котором крутится главный цикл гуя. Если человек хочет, чтобы интерфейс был отзывчив, то один из самых популярных, но кривых способов сделать это - создать поток питона, который будет виснуть в отдельном потоке ОС, пока тикль продолжит делать параллельной обработки. Если ты посмотришь на Modules/_tkinter.c: _tkinter_tkapp_mainloop_impl, то увидишь, что главный цикл отпускает GIL только на время обработки/ожидания одного события, после чего обратно его берет. То есть, параллельный питоновый поток будет работать только тогда, когда _tkinter_tkapp_mainloop_impl=>Tcl_DoOneEvent ожидает события. И наоборот, когда работает и висит параллельный поток, может обработаться только одно событие, после чего LEAVE_TCL зависнет в take_gil.

Эта проблема не актуальна для hello world приложений, но становится тем более острой, чем больше становится приложения, чем дольше оно начинает провисать, чем больше появляется в интерфейсе отзывчивых фич, которым нужны постоянно работающие функции в главном потоке для отрисовки. По этой причине, если ты хочешь обрести реальную отзывчивость с питоном, то ты должен учить тикль, чтобы писать на нем истинную многопоточность без GIL.

Исходная версия byko3y, :

Tcl - это язык высокого уровня. Что-то вроде lisp, но без скобок и с другим подходом к синтаксису

Спасибо за объяснение, но тикль совершенно не помож на лисп.

А то, про что ты говоришь - его БИБЛИОТЕКА, которая называется Tk. Которая адаптирована для Python в виде Tkinter

Дело в том, что проклятый питон и Tk/Tcl имеют один общий главный поток, в котором крутится главный цикл гуя. Если человек хочет, чтобы интерфейс был отзывчив, то один из самых популярных, но кривых способов сделать это - создать поток питона, который будет виснуть в отдельном потоке ОС, пока тикль продолжит делать параллельной обработки. Если ты посмотришь на Modules/_tkinter.c: _tkinter_tkapp_mainloop_impl, то увидишь, что главный цикл отпускает GIL только на время обработки/ожидания одного события, после чего обратно его берет. То есть, параллельный питоновый поток будет работать только тогда, когда _tkinter_tkapp_mainloop_impl=>Tcl_DoOneEvent ожидает события. И наоборот, когда работает и висит параллельный поток, может обработаться только одно событие, после чего LEAVE_TCL зависнет в take_gil.

Эта пробелма не актуальна для hello world приложений, но становится тем более острой, чем больше становится приложения, чем дольше оно начинает провисать, чем больше появляется в интерфейсе отзывчивых фич, которым нужны постоянно работающие функции в главном потоке для отрисовки. По этой причине, если ты хочешь обрести реальную отзывчивость с питоном, то ты должен учить тикль, чтобы писать на нем истинную многопоточность без GIL.