Найти - Пользователи
Полная версия: Расшаривание глобальной переменной
Начало » Python для экспертов » Расшаривание глобальной переменной
1
regall
Вот столкнулся с проблемой получения доступа к глобальной переменной:
Есть у меня главный модуль run.py, из которого загружается программа. Импортирую из модуля utils.py класс-потомок (Thread), использующий булевую глобальную переменную application_busy (чтобы прерваться когда нужно), а из модуля commands.py - класс, который устанавливает значение этой переменной в True, запускает поток, выполняет свои действия, а потом устанавливает в False, чтоб поток прекратил работу.
Мне нужно сделать глобальную переменную доступную обоим этим классам, как это сделать?

global application_busy
не помагает.

P.S. Вообще считаю глобальные переменные порочной практикой (поэтому никогда их не использовал), так что может есть другое решение?
regall
Решил проблему, собственно, забив на глобальные переменныt, и считаю что правильно сделал. А сделал я с помощью регистрации экземпляра объекта, хранящего состояние приложения ApplicationStatus как утилиты (zope.component.getGlobalSiteManager().registerUtility()), теперь статус приложения доступен везде + готов к масштабированию (мало ли что еще понадобится)….

P.S. Использую в разработке zope.interface, zope.component.
P.P.S. А о решении с глобальными переменными тоже хочется узнать. Буду очень призначетелен за дельные советы.
pioner
regall
P.P.S. А о решении с глобальными переменными тоже хочется узнать. Буду очень призначетелен за дельные советы.
crchemist написал:
__builtin__.session = session
…і вона стане глобальною
poltergeist
А мне такой подход очень нравится (почитайте описание): http://pypi.python.org/pypi/Contextual (автор PJ Eby), также есть его форк, который хоть развивается: http://pypi.python.org/pypi/Contextual-fork (автор Сергей Щетинин). Вашу проблему эти средства не решат (вам наверное нужно просто синхронизировать потоки -> модуль threading), но на будущее может пригодится как замена глобальным переменным.
regall
poltergeist
вам наверное нужно просто синхронизировать потоки
Нет, мне не надо синхронизировать потоки, мне просто надо чтобы под. поток выводил точки, пока приложение ‘висит’, вот и все =)
Striver
Я у себя подобное делал дополнительным модулем (у меня он назывался Config.py), в котором хранились только эти глобальные переменные стандартных типов. Импортировать его надо обязательно import Config, ни в коем случае не from Config import var1, тогда все переменные вроде Config.var1 действуют как глобальные во всей программе.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB