1

我正在使用 mod_python 在 Apache 中运行 Trac。我正在开发一个插件,但不确定如何存储/缓存全局变量。

我是 python 的新手,用谷歌搜索了这个主题,发现 mod_python 缓存了 python 模块(我认为)。但是,我希望在重新启动 Web 服务时重置缓存,但它似乎没有。我之所以这么说是因为我有一个全局变量是一个列表,我测试该列表以查看一个值是否存在,如果不存在则添加它。我第一次运行它时,它在列表中添加了三个条目。随后,该列表从一开始就有三个条目。

例如:

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 调用的。第一次运行时,它添加了所有三个条目。现在 - 即使重新启动 Web 服务器后 len(globalList) 命令始终为 3。

我怀疑答案可能是我的会话(以及全局变量)正在被缓存,因为当我在 Web 服务器重新启动后刷新 Trac 中的页面时,Trac 会记住我的登录详细信息。如果是这种情况 - 我如何强制清除缓存。请注意,我不想手动重置 globalList 变量,即globalList.length = 0

任何人都可以就正在发生的事情提供任何见解吗?谢谢

4

2 回答 2

4

强制性:

切换到wsgi使用mod_wsgi.

不要使用mod_python.

用于配置的帮助mod_wsgitrac

于 2009-06-15T11:56:54.240 回答
3

阅读它说的 mod-python 常见问题解答

全局对象在 apache 进程的生命周期中存在于 mod_python 中,通常比单个请求的生命周期长得多。这意味着如果您希望每次都初始化一个全局变量,您会感到惊讶......

转到链接 http://www.modpython.org/FAQ/faqw.py?req=show&file=faq03.005.htp

所以问题是你为什么要使用全局变量?

于 2009-06-15T10:38:31.213 回答