2015-12-17 182 views
35

假設我正在Jupyter/Ipython筆記本計算機上進行大量數據分析,並且耗費大量時間進行計算。然後,出於某種原因,我必須關閉Jupyter本地服務器I,但我希望稍後再回到分析中,而不必再次耗費所有耗時的計算。如何在以後使用Jupyter(IPython)筆記本電腦會話


我會像 做的是pickle或存儲整個Jupyter會話(所有大熊貓dataframes,np.arrays,變量,...),所以我可以放心地關閉服務器,知道我可以返回與我之前的會話完全相同的狀態。

它在技術上甚至可能嗎?有沒有我忽略的內置功能?


編輯:基於this答案有一個%storemagic這應該是 「輕量級泡菜」。然而,你必須手動存儲變量,像這樣:

#inside a ipython/nb session
foo = "A dummy string"
%store foo
關閉SEESION,重新啓動內核
%store -r foo#r代表刷新
print(foo) # "A dummy string"

這是相當接近我想要什麼,但必須手動完成並且無法區分不同的會話它不太有用。

+1

這方面的進展如何?我只注意到Spyder IDE中有一個工作區,可以將變量保存到* .mat中。但不知道這是否可以移植到Jupyter Notebook中。 – cqcn1991

回答

14

(我不是提供這個作爲一個實際的答案,而評,但我需要更多的聲譽發表評論。)

您可以存儲數據最喜歡的變量以系統的方式。我通常做的是將所有的數據框,數組等存儲在pandas.HDFStore中。在筆記本的開始,申報

backup = pd.HDFStore('backup.h5') 

,然後再存儲新的變量,你產生這些

backup['var1'] = var1 

最後,可能是一個好主意,做

backup.close() 

前關閉服務器。下一次你想繼續筆記本:

backup = pd.HDFStore('backup.h5') 
var1 = backup['var1'] 

事實告訴我,我更喜歡ipython筆記本內置功能。您無法以這種方式保存所有內容(例如對象,連接),並且很難將筆記本組織成具有這麼多樣板代碼。

+3

這是一個非常有趣的解決方法,但我可以從字面上感覺到與維護此類系統相關的痛苦。感謝您的提示tho :) –

6

這個問題是涉及到:How to cache in IPython Notebook?

要保存單個細胞的效果,caching magic就派上用場了。

%%cache longcalc.pkl var1 var2 var3 
var1 = longcalculation() 
.... 

當重新運行筆記本,該單元的內容被從所述高速緩存加載。

這不是完全回答你的問題,但它可能足以當所有冗長的計算結果快速恢復。將筆記本頂部的全部運行按鈕組合起來,這對我來說是一個可行的解決方案。

緩存魔法無法保存整個筆記本的狀態yet。據我所知,目前還沒有其他系統可以恢復「筆記本」。這將需要保存python內核的所有歷史記錄。加載筆記本並連接到內核後,應該加載此信息。

相關問題