我有一個作爲無線手持計算機的服務器運行的Python模塊。每當手持設備向服務器發送消息時,模塊就會確定它是什麼類型的消息,然後組裝適當的響應。因爲響應通常是依賴於狀態的,所以我使用全局變量來保留/共享處理每種消息類型的各個函數之間的信息。保存和恢復執行之間的變量值
我遇到的問題是應用程序關閉時(無論出於何種原因),全局變量值(當然)丟失了,所以在重新啓動應用程序時,它與手持設備不同步。我需要一種可靠的方式來存儲這些值以進行恢復。
我到目前爲止的方向(但還沒有得到它的工作)是將變量名和它們的值寫入磁盤上的CSV文件,每次更新 - 然後(當應用程序啓動時),查找該文件並使用它來將變量分配到其以前的狀態。我在編寫文件或閱讀文件方面沒有任何困難,但由於某些原因,這些值並未得到分配。
我可以發佈評論/幫助的代碼,但在此之前我想知道我是否剛剛走了一個完全錯誤的方向。有沒有更好的(或至少是可取的)方法來保存和恢復這些值?
感謝, JDM
====
跟進。這可能是一個觸摸klunky,但這是我有,它的工作。我關心的唯一全局變量是以「CUR_」開頭的全局變量。我不得不使用tempDict1
,因爲解釋器似乎不喜歡直接在globals()
上迭代。
import pickle CUR_GLO1 = 'valglo1' CUR_GLO2 = 'valglo2' CUR_GLO3 = 'valglo3' def saveGlobs(): tempDict1 = globals().copy() tempDict2 = {} for key in tempDict1: if (key[:4]=='CUR_'):tempDict2[key] = tempDict1[key] pickle.dump(tempDict2,open('tempDict.p','wb')) def retrieveGlobs(): tempDict = pickle.load(open('tempDict.p','rb')) globals().update(tempDict)
如果您想方便地存儲和檢索Python變量,[pickle module](http://docs.python.org/2/library/pickle.html)可能更容易使用。有一個簡單的例子[這裏](http://wiki.python.org/moin/UsingPickle) – m01
這將工作與單獨的全局(現在我有它)?或者我需要將存儲切換到字典/列表/無論什麼?我試圖完成的一部分是**不**必須在每次需要向狀態信息添加一條新信息時更新代碼的保存/恢復部分。 – JDM
謝謝,@ m01。看起來'pickle'會很好地完成這項工作。 – JDM