2010-07-27 31 views

回答

2

靜態文件與應用程序文件分開存儲。如果您需要從main.py加載data.pkl,則不要將其標記爲靜態文件,並且可以像其他任何應用程序文件一樣通過main.py訪問。

參考:應用程序配置的Handlers For Static Files


備選:爲什麼沒有定義存儲在data.pkl在你的Python源的全局變量的信息?那麼你不必經歷閱讀文件和反序列化其內容的麻煩,而且它會更快一些。這也可以讓您輕鬆利用應用緩存 - 您的數據將被加載一次,然後緩存以供後續請求使用。

+0

您的選擇不一定會更快:Python仍然需要加載和分析您將pickle(或文本表示)嵌入的模塊,而不需要比加載pickle更快。 – 2010-07-27 08:42:54

+0

現在我改變了我的問題,我意識到我可以簡單地在py模塊內添加數據文件 – 2010-07-29 17:11:43

+0

正確 - 由於應用程序緩存,「每個實例只會評估一次*'the_list_that_never_changes'。一旦加載,它將一直保留在內存中,直到實例終止(由於流量較低)。當您的應用程序加入一個新實例(由於流量過高或因爲您的應用程序在無流量期間停止)時,此變量將在新實例中初始化。 – 2010-07-29 22:05:13

0

data.pkl在同一目錄與main.py和使用的東西沿着這些線路:

pickle_path = os.path.join(os.path.dirname(__file__), 'data.pkl') 
f = open(pickle_path) 
data = pickle.load(f) 

不要添加data.pklapp.yaml

如果您經常閱讀這些數據,取出後可能會對memcache有所幫助。然後你可以從memcache中讀取它,這通常比從磁盤讀取文件要快。

+0

我仍然好奇。第一:你的解決方案是不是'數據'現在在內存中可用?那麼爲什麼我需要在memcache中使用它? – 2010-07-29 17:07:05

+0

請參閱新版本的問題,謝謝! – 2010-07-29 17:12:17

+0

@indiehacker,它不是/總是/在記憶中。只有實例在運行,全局變量纔會生效。請參閱http://code.google.com/intl/zh-CN/appengine/docs/python/runtime.html#App_Caching – Constantin 2010-07-29 18:10:53

相關問題