mod_python кэширование переменных - PullRequest
1 голос
/ 15 июня 2009

Я использую mod_python для запуска Trac в Apache. Я разрабатываю плагин и не уверен, как глобальные переменные хранятся / кэшируются.

Я новичок в python, погуглил тему и обнаружил, что mod_python кеширует модули python (я думаю). Тем не менее, я ожидаю, что кэш будет сброшен при перезапуске веб-службы, но это не так. Я говорю это, потому что у меня есть глобальная переменная, которая является списком, я проверяю список, чтобы увидеть, существует ли значение, а если нет, то я добавляю его. Когда я впервые запустил это, он добавил три записи в список. Впоследствии список содержит три записи с самого начала.

Например:

globalList = []

class globalTest:

  def addToTheList(itemToAdd):
      print(len(globalTest))
      if itemToAdd not in globalList:
          globalList.append(itemToAdd)

  def doSomething():
    addToTheList("I am new entry one")
    addToTheList("I am new entry two")
    addToTheList("I am new entry three")

Приведенный выше код является лишь примером того, что я делаю, а не фактическим кодом ;-). Но, по сути, метод doSomething () вызывается Trac. При первом запуске он добавил все три записи. Теперь - даже после перезапуска веб-сервера команда len (globalList) всегда равна 3.

Я подозреваю, что ответом может быть то, что мой сеанс (и, следовательно, глобальная переменная) кэшируется , потому что Trac запоминает мои данные для входа в систему, когда я обновляю страницу в Trac после перезапуска веб-сервера. Если это так - как заставить кеш очищаться? Обратите внимание, что я не хочу сбрасывать переменную globalList вручную, т.е. globalList.length = 0

Может ли кто-нибудь предложить какое-либо понимание того, что происходит? Спасибо

Ответы [ 2 ]

4 голосов
/ 15 июня 2009

Обязательно:

Переключитесь на wsgi , используя mod_wsgi.

Не использовать mod_python.

Для настройки mod_wsgi с помощью trac .

доступна справка .
3 голосов
/ 15 июня 2009

прочитайте FAQ по мод-питону

Глобальные объекты живут внутри mod_python для жизни процесса Apache, что в целом намного дольше, чем жизнь одного запроса. это означает, что если вы ожидаете глобальную переменную инициализироваться каждый раз, когда вы будете удивляться ....

перейти по ссылке http://www.modpython.org/FAQ/faqw.py?req=show&file=faq03.005.htp

поэтому вопрос, почему вы хотите использовать глобальную переменную?

...