2009-06-15 44 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