2009-06-15 68 views
1

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

我是新来的蟒蛇和GOOGLE搜索主题,发现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") 

上面的代码只是我在做什么,而不是实际的代码;-)一个例子。但基本上由Trac调用doSomething()方法。第一次运行时,它添加了所有三个条目。现在 - 即使重新启动Web服务器后,LEN(globalList)命令总是3.

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

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

+0

请参阅我对Anurag Uniyal的回答的评论。我不再使用全局变量,但想知道如何强制刷新缓存变量 – 2009-06-15 11:22:36

回答

3

阅读MOD-python的常见问题,它说

全局对象住里面的mod_python 为Apache进程的生命, 这在一般比 多少不再是单一的请求的生命。这意味着 如果你希望一个全局变量 要你每次都会 惊讶时初始化....

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

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

+0

谢谢你 - 我没有特别需要一个* global *变量,只有一个可以在课堂上使用的变量。我现在修改了我的代码,以便在类级别定义globalList []。我最初使用的是全局变量,因为我无法使类级变量正常工作。尽管我使用类级变量获得了相同的缓存,但有没有办法强制重新加载? – 2009-06-15 11:14:33

+0

也 - 文档说“全局对象住在mod_python的生命中的Apache进程”。但我认为,当web服务器重新启动时仍然会重置。 – 2009-06-15 11:16:36