Пилоны: свободные переменные уровня модуля? - PullRequest
1 голос
/ 25 января 2010

Даже не уверен, что уровень модуля здесь правильный, но ...

У меня есть проект Pylons, и в компоненте модели у меня есть глобальная переменная doc в __init__.py, которую я хочу использовать из разных объектов Query. (Документ - это дескриптор документа в XML-файле, который я использую в качестве поддельной БД.) Мой вопрос: когда заканчивается область действия __init__.py? В настоящее время я не освобождаю документ с помощью doc.unlink (), и я не уверен, куда его поместить.

В альтернативном проекте, о котором я думал, речь идет о том, чтобы заставить потребляющий объект (Query) иметь переменную уровня класса этого документа (то есть сделать его одноэлементным). Но похоже, что жизнь моего объекта Query такова, что документ всегда перераспределяется с новым дескриптором Document.

class Query(object):
    doc = None 

    def __init__(self, content=None):
        self.content = content
        if self.doc == None:                        
            self.doc = parse(os.path.join(config['app_conf']['xmldb'], "sample_search_result.xml"))

Я могу сказать, потому что адрес элементов в Документе постоянно меняется.

Кто-нибудь хочет помочь новичку?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2010

Рассматривали ли вы вопрос об установке объекта doc в globals? Поскольку это неизменный объект, он должен быть идеальным местом для его хранения. Чем вы можете ссылаться на globals с любого контроллера и передавать его объекту Query (во время __init__ или явно при вызове метода объекта)

Вы также можете попытаться сохранить объект doc в контроллере session (если для каждого сеанса требуется чтение)

0 голосов
/ 25 января 2010

Объекты перестают существовать только тогда, когда 1) ссылки на них не существуют или 2) интерпретатор завершается. Модуль / пакет хранит ссылку на все имена уровня модуля в своем собственном dict; удаление всех ссылок на модуль во всех других модулях, а также в sys.modules, и всех ссылок на любые объекты внутри него приведет к освобождению модуля.

...