mod_python 变量缓存

发布于 2024-07-25 04:10:15 字数 1028 浏览 5 评论 0 原文

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

我是 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")

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

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

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

I'm using mod_python to run Trac in Apache. I'm developing a plugin and am not sure how global variables are stored/cached.

I am new to python and have googled the subject and found that mod_python caches python modules (I think). However, I would expect that cache to be reset when the web service is restarted, but it doesn't appear to be. I'm saying this becasue I have a global variable that is a list, I test the list to see if a value exists and if it doesn't then I add it. The first time I ran this, it added three entries to the list. Subsequently, the list has three entries from the start.

For example:

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")

The code above is just an example of what I'm doing, not the actual code ;-). But essentially the doSomething() method is called by Trac. The first time it ran, it added all three entries. Now - even after restarting the web server the len(globalList) command is always 3.

I suspect the answer may be that my session (and therefore the global variable) is being cached because Trac is remembering my login details when I refresh the page in Trac after the web server restart. If that's the case - how do I force the cache to be cleared. Note that I don't want to reset the globalList variable manually i.e. globalList.length = 0

Can anyone offer any insight as to what is happening?
Thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

绳情 2024-08-01 04:10:16

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

全局对象存在于 mod_python 中
对于 apache 进程的生命周期,
一般来说比
单个请求的生命周期。 这
意味着如果你期望一个全局变量
每次你需要的时候都会被初始化
感到惊讶......

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

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

read the mod-python faq it says

Global objects live inside mod_python
for the life of the apache process,
which in general is much longer than
the life of a single request. This
means if you expect a global variable
to be initialised every time you will
be surprised....

go to link
http://www.modpython.org/FAQ/faqw.py?req=show&file=faq03.005.htp

so question is why you want to use global variable?

み青杉依旧 2024-08-01 04:10:15

强制:

使用 wsgi rel="nofollow noreferrer">mod_wsgi

不要使用 mod_python

可使用 trac 配置 mod_wsgi 帮助

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文