Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 8, 2009 11:23:43

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Расшаривание глобальной переменной

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

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

P.S. Вообще считаю глобальные переменные порочной практикой (поэтому никогда их не использовал), так что может есть другое решение?



Офлайн

#2 Дек. 8, 2009 11:46:59

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Расшаривание глобальной переменной

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

P.S. Использую в разработке zope.interface, zope.component.
P.P.S. А о решении с глобальными переменными тоже хочется узнать. Буду очень призначетелен за дельные советы.



Офлайн

#3 Дек. 8, 2009 12:03:18

pioner
От:
Зарегистрирован: 2009-10-21
Сообщения: 146
Репутация: +  0  -
Профиль   Отправить e-mail  

Расшаривание глобальной переменной

regall
P.P.S. А о решении с глобальными переменными тоже хочется узнать. Буду очень призначетелен за дельные советы.
crchemist написал:
__builtin__.session = session
…і вона стане глобальною



Офлайн

#4 Дек. 8, 2009 22:13:18

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

Расшаривание глобальной переменной

А мне такой подход очень нравится (почитайте описание): http://pypi.python.org/pypi/Contextual (автор PJ Eby), также есть его форк, который хоть развивается: http://pypi.python.org/pypi/Contextual-fork (автор Сергей Щетинин). Вашу проблему эти средства не решат (вам наверное нужно просто синхронизировать потоки -> модуль threading), но на будущее может пригодится как замена глобальным переменным.



Офлайн

#5 Дек. 8, 2009 22:36:27

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Расшаривание глобальной переменной

poltergeist
вам наверное нужно просто синхронизировать потоки
Нет, мне не надо синхронизировать потоки, мне просто надо чтобы под. поток выводил точки, пока приложение ‘висит’, вот и все =)



Офлайн

#6 Дек. 9, 2009 12:15:24

Striver
От:
Зарегистрирован: 2006-10-26
Сообщения: 247
Репутация: +  22  -
Профиль   Отправить e-mail  

Расшаривание глобальной переменной

Я у себя подобное делал дополнительным модулем (у меня он назывался Config.py), в котором хранились только эти глобальные переменные стандартных типов. Импортировать его надо обязательно import Config, ни в коем случае не from Config import var1, тогда все переменные вроде Config.var1 действуют как глобальные во всей программе.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version