【问题标题】:mod_python caching of variablesmod_python 缓存变量
【发布时间】:2009-06-15 10:32:44
【问题描述】:

我正在使用 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

谁能提供任何关于正在发生的事情的见解? 谢谢

【问题讨论】:

  • 请看我对 Anurag Uniyal 的回答。我不再使用全局变量,但想知道如何强制刷新缓存变量

标签: python caching trac mod-python


【解决方案1】:

【讨论】:

    【解决方案2】:

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

    全局对象存在于 mod_python 中 对于 apache 进程的生命周期, 通常比 单个请求的生命周期。这个 意味着如果你期望一个全局变量 每次你都会被初始化 吃惊吧……

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

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

    【讨论】:

    • 谢谢你 - 我并不特别需要一个 global 变量,只需要一个可在类级别访问的变量。我现在修改了我的代码,所以 globalList[] 是在类级别定义的。我最初使用的是全局变量,因为我无法让类级别变量工作。我得到了与类级别变量相同的缓存,有没有办法强制重新加载?
    • 也 - 文档说“全局对象在 apache 进程的生命周期中存在于 mod_python 中”。我原以为重启网络服务后仍会重置。
    • 是的,如果您重新启动 apache,这不应该发生,所以您确定重新启动 apache 后,您会看到旧值吗?关于类级别,您是否使用实例属性,例如在 init 中,因为类级别仍将被缓存
    • 您还说“Trac 正在记住我的登录详细信息”我不确定 abt trac 但这是由于浏览器端的 cookie 而与服务器端缓存无关
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 2020-06-19
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 2013-08-31
    相关资源
    最近更新 更多