2012-09-12 89 views
2

我有一個使用命名空間組織數據的GAE應用程序。我的問題是 - 命名空間是以每個線程爲基礎還是以每個實例爲基礎進行管理?如果我在GAE配置中啓用線程安全,是否有可能在一個線程中設置命名空間會影響其他線程?GAE命名空間是否可以安全地用於線程安全?

+0

我已經寫了一個線程安全分析,並在我的博客上發表評論(儘管GAE/J爲導向)http://devcon5.blogspot.com我將添加您的問題作爲一個更多的回答。希望您對我的分析有所回顧。謝謝 –

回答

0

它看起來像名稱空間是GAE/J上的線程安全。

  • 命名空間設置爲一個查詢字符串參數
  • 循環25秒,記錄的命名空間,每5秒,該線程一起:

    這已經通過運行簡單的servlet,做以下的測試ID

  • 調用servlet 3次用三種不同的命名空間,與每個呼叫之間

10秒的暫停隨着<線程> true </threadsafe >在appengine-web.xml中設置,所有請求都由同一個實例處理。通過檢查應用引擎控制檯中正在運行的實例的數量以及檢查每個請求的日誌來驗證這一點。每個日誌條目都有一個條目,如:instance = 00c61b117c8e9fd8aa8b02bff53de32a49b20e。在同一個實例中,在線程上設置名稱空間不會影響其他線程上的名稱空間。

要確認配置中的線程安全設置正常,它被設置爲false並進行相同的測試運行。正如所料,每個請求都會創建一個新實例。

5

set_namespace()使用os.environ

def set_namespace(namespace): 
    ... 
    os.environ[_ENV_CURRENT_NAMESPACE] = namespace 

os.environ已經修補使用線程本地存儲。

所以是的,名稱空間是線程安全的。

+0

你知道這是否也適用於Java實現? – snae