Форум сайта python.su
Вот столкнулся с проблемой получения доступа к глобальной переменной:
Есть у меня главный модуль run.py, из которого загружается программа. Импортирую из модуля utils.py класс-потомок (Thread), использующий булевую глобальную переменную application_busy (чтобы прерваться когда нужно), а из модуля commands.py - класс, который устанавливает значение этой переменной в True, запускает поток, выполняет свои действия, а потом устанавливает в False, чтоб поток прекратил работу.
Мне нужно сделать глобальную переменную доступную обоим этим классам, как это сделать?
global application_busy
Офлайн
Решил проблему, собственно, забив на глобальные переменныt, и считаю что правильно сделал. А сделал я с помощью регистрации экземпляра объекта, хранящего состояние приложения ApplicationStatus как утилиты (zope.component.getGlobalSiteManager().registerUtility()), теперь статус приложения доступен везде + готов к масштабированию (мало ли что еще понадобится)….
P.S. Использую в разработке zope.interface, zope.component.
P.P.S. А о решении с глобальными переменными тоже хочется узнать. Буду очень призначетелен за дельные советы.
Офлайн
regallcrchemist написал:
P.P.S. А о решении с глобальными переменными тоже хочется узнать. Буду очень призначетелен за дельные советы.
Офлайн
А мне такой подход очень нравится (почитайте описание): http://pypi.python.org/pypi/Contextual (автор PJ Eby), также есть его форк, который хоть развивается: http://pypi.python.org/pypi/Contextual-fork (автор Сергей Щетинин). Вашу проблему эти средства не решат (вам наверное нужно просто синхронизировать потоки -> модуль threading), но на будущее может пригодится как замена глобальным переменным.
Офлайн
poltergeistНет, мне не надо синхронизировать потоки, мне просто надо чтобы под. поток выводил точки, пока приложение ‘висит’, вот и все =)
вам наверное нужно просто синхронизировать потоки
Офлайн
Я у себя подобное делал дополнительным модулем (у меня он назывался Config.py), в котором хранились только эти глобальные переменные стандартных типов. Импортировать его надо обязательно import Config, ни в коем случае не from Config import var1, тогда все переменные вроде Config.var1 действуют как глобальные во всей программе.
Офлайн