mod_python 变量缓存
我在Apache中使用mod_python来运行Trac。我正在开发一个插件,但不太确定全局变量是如何存储或缓存的。
我对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
3
看一下mod-python的常见问题解答,上面说:
全局对象在mod_python中存在的时间和apache进程的生命周期是一样的,通常这个时间比单个请求的处理时间要长得多。这意味着如果你期待每次都能初始化一个全局变量,你可能会感到惊讶……
可以访问这个链接了解更多信息:http://www.modpython.org/FAQ/faqw.py?req=show&file=faq03.005.htp
那么问题是,为什么你想使用全局变量呢?