我現在使用的解決方案如何:如何以編程方式訪問存儲爲靜態文件的數據(加載醃製文件)?
我在我的所有.py模塊的同一目錄中有一個1MB的.dbf文件。在main.py
我
import tools
在tool.py
代碼:
the_list_that_never_changes = loadDbf(file).variables['CNTYIDFP'].
所以只裝載一次,並且總是在內存中就可以使用了...正確嗎?
我現在使用的解決方案如何:如何以編程方式訪問存儲爲靜態文件的數據(加載醃製文件)?
我在我的所有.py模塊的同一目錄中有一個1MB的.dbf文件。在main.py
我
import tools
在tool.py
代碼:
the_list_that_never_changes = loadDbf(file).variables['CNTYIDFP'].
所以只裝載一次,並且總是在內存中就可以使用了...正確嗎?
靜態文件與應用程序文件分開存儲。如果您需要從main.py
加載data.pkl
,則不要將其標記爲靜態文件,並且可以像其他任何應用程序文件一樣通過main.py
訪問。
參考:應用程序配置的Handlers For Static Files。
備選:爲什麼沒有定義存儲在data.pkl
在你的Python源的全局變量的信息?那麼你不必經歷閱讀文件和反序列化其內容的麻煩,而且它會更快一些。這也可以讓您輕鬆利用應用緩存 - 您的數據將被加載一次,然後緩存以供後續請求使用。
將data.pkl
在同一目錄與main.py
和使用的東西沿着這些線路:
pickle_path = os.path.join(os.path.dirname(__file__), 'data.pkl')
f = open(pickle_path)
data = pickle.load(f)
不要添加data.pkl
到app.yaml
。
如果您經常閱讀這些數據,取出後可能會對memcache有所幫助。然後你可以從memcache中讀取它,這通常比從磁盤讀取文件要快。
我仍然好奇。第一:你的解決方案是不是'數據'現在在內存中可用?那麼爲什麼我需要在memcache中使用它? – 2010-07-29 17:07:05
請參閱新版本的問題,謝謝! – 2010-07-29 17:12:17
@indiehacker,它不是/總是/在記憶中。只有實例在運行,全局變量纔會生效。請參閱http://code.google.com/intl/zh-CN/appengine/docs/python/runtime.html#App_Caching – Constantin 2010-07-29 18:10:53
您的選擇不一定會更快:Python仍然需要加載和分析您將pickle(或文本表示)嵌入的模塊,而不需要比加載pickle更快。 – 2010-07-27 08:42:54
現在我改變了我的問題,我意識到我可以簡單地在py模塊內添加數據文件 – 2010-07-29 17:11:43
正確 - 由於應用程序緩存,「每個實例只會評估一次*'the_list_that_never_changes'。一旦加載,它將一直保留在內存中,直到實例終止(由於流量較低)。當您的應用程序加入一個新實例(由於流量過高或因爲您的應用程序在無流量期間停止)時,此變量將在新實例中初始化。 – 2010-07-29 22:05:13