2011-05-05 71 views
5

使用谷歌應用程序引擎:Google App Engine是否每個請求都運行一個應用程序的實例?或所有請求?

# more code ahead not shown 
application = webapp.WSGIApplication([('/', Home)], 
           debug=True) 

def main(): 
    run_wsgi_app(application) 

if __name__ == "__main__": 
    main() 

如果兩個不同的用戶要求兩個不同的機器上的網頁,服務器的兩個單獨的實例將被調用?

或者只有一個服務器實例正在運行,處理所有請求的所有時間?

如果一個用戶在同一個瀏覽器中打開兩次網頁,那麼該怎麼辦?

編輯

根據下面的答案,一個實例可以處理來自不同用戶的請求啓動輪流。然後考慮下面的代碼部分,從谷歌給的例子採取:

class User(db.Model): 
    email = db.EmailProperty() 
    nickname = db.StringProperty() 

1,電子郵件暱稱在這裏被定義爲類變量? 2,由同一個服務器實例處理的所有請求共享相同的變量,從而錯誤地相互干擾? (說,你的電子郵件出現在另一頁)

ps。我知道我應該閱讀手冊和文檔更和我這樣做,但是從經驗的程序員答案將真正幫助我瞭解通過更快,更感謝

+1

RE:郵件/暱稱爲類變量。他們是'財產',你不會在你和班級的實例一起工作的班上工作。即你不用'User.email =「[email protected]」'你做'u = User(); u.email =「[email protected]」' – 2011-05-05 15:47:46

回答

4

一個實例可以處理在其生命週期的許多要求。在python運行時的線程模型中,每個實例在任何給定的時間只能處理一個請求。如果2個請求在同一時間到達,他們可能會在其他的後一個實例來處理一個或第二個實例可能會產生處理請求。


編輯:

通常,由每個請求所使用的變量將範圍限定於RequestHandler實例的.get().post()方法,並且因此不能「泄漏」到其他請求。在腳本中使用全局變量時應該小心,因爲這些變量將緩存在實例中,並在請求之間共享。你爲什麼要(這是所有應用程序很好的意見,對於這個問題),你會沒事的,不要不知道到底使用全局變量。

1

的App Engine動態地構建起來,眼淚就下來了實例依據的申請量。

the docs

App Engine應用程序在任何給定 時間,這取決於你的應用程序接收 請求量由 任意數量的實例供電。 隨着您的應用程序 的請求數量增加,爲其供電的實例數量也增加。

每個實例都有自己的 傳入請求的隊列。 App Engine會監控 在每個 實例隊列中等待的請求數。如果App Engine 檢測到應用程序 的隊列由於增加了 加載而變得太長,它會自動創建一個新的應用程序實例 以處理加載的 。當請求交易量下降

App引擎擴展反向 實例。在這種方式下,App Engine可以確保您的應用程序的當前實例 的所有 都被用於實現最佳效率。 這個自動縮放使得運行 App Engine非常划算。

當應用程序不被使用的所有 ,應用程序引擎關閉其相關 實例,但容易 儘快重新加載它們,因爲它們需要 。

相關問題