2012-08-10 49 views
2

我是GAE/Python新手。我有一些系統和應用程序變量,我想設置一次,並將它們應用於我的應用程序中的所有.py文件。誰能告訴我我是如何完成的(有一個地方只能在應用程序啓動時運行一次)?有點像在其他應用程序中使用配置文件時會做的事情。如何在GAE中使用Python執行一次性初始化?

我正在運行Python 2.7。

回答

2

在GAE,模塊在運行時(they are cached)加載只有一次,所以你可以與所有的初始化創建一個模塊,全局變量等。如果你使用線程= true在您app.yaml中,請確保您處理這些全局正確(以線程安全的方式)。

注意,在新實例中,初始化將再次執行。如果你的初始化過程非常長(秒),那麼最好的辦法是預先計算它,存儲在數據存儲區中,然後再次從數據存儲裝載到init模塊中。

+0

這是爲創建一個新的文件夾一樣簡單(如姓名=「初始化」),並添加__init__.py文件和聲明該文件中的全局變量?這些全局變量是否在那個應用程序的所有模塊中都是全局的? (如果我走了,請原諒我的無知)。謝謝。 – 2012-08-10 16:16:41

+0

您不需要創建新文件夾。你可以創建你的init.py腳本,並在那裏聲明所有的變量和全局變量,然後將它導入你的應用程序模塊。這些全局變量在一個實例內是全局的 - 所以如果你改變了全局變量的值,那麼在整個應用程序中(在運行應用程序的許多實例上)都不會改變它,但只有在一個實例中,變量。如果要在整個應用程序中使用全局變量,則必須使用全局一致的數據存儲/ memcache。 – 2012-08-11 07:56:10

0

在appengine上使用2.7的推薦方法之一是在app.yaml中設置環境變量。

https://developers.google.com/appengine/docs/python/config/appconfig#env_variables

(如其他答案貼在這裏,這不是唯一的方法。)

+0

感謝您的快速響應。我只是試圖設置一些文件夾路徑並預先填充許多具有允許值的列表,而我不想多次填充這些列表。例如。我想初始化允許狀態列表,如下所示:StatusList = ['正在翻譯','待審覈','已發佈','等'];這會被認爲是一個環境變量?代碼在app.yaml中看起來像什麼?謝謝。 – 2012-08-10 15:43:49

+0

您忘記了原始問題中的那一點細節;-)列表在yaml文件中工作,但是在app.yaml中使用env_variables不起作用。所以這不適合你的要求。我使用了一個單獨的settings.yaml來獲取更多需要的更多配置信息。 – 2012-08-10 23:17:13

+0

如果我的理解正確,setting.yaml可能是我需要的。基本上我想在某些事件發生時執行特定的功能,例如啓動應用程序,初始化會話,用戶登錄,某些變量的值,何時發生等。我在哪裏可以找到更多關於settings.yaml和GAE提供的各種事件觸發器的信息?謝謝。 – 2012-08-23 20:23:54

-1

如果我明白你的問題,我想你可以在GAE上使用warmup request

在此,你實際上可以初始化你的,你經常要求所有變種的和方法..

+0

您需要知道,預熱請求並不總是發送到新實例。當用戶請求啓動新實例時,該用戶請求會直接發送到新實例,繞過熱身請求。因此,如果存在必須針對每個實例絕對運行的初始化代碼,則預熱請求不適合放置此代碼。 – 2012-09-24 19:57:17