Załóżmy, że wykonuję większą analizę danych w notebooku Jupyter / Ipython z wieloma czasochłonnymi obliczeniami. Następnie z jakiegoś powodu muszę wyłączyć lokalny serwer jupyter I, ale chciałbym wrócić do późniejszej analizy, bez konieczności ponownego wykonywania wszystkich czasochłonnych obliczeń.
Co bym jak miłość do zrobienia jest pickle
ani przechowywać całą sesję Jupyter (wszystkie pandy dataframes, np.arrays, zmienne, ...), więc mogę bezpiecznie wyłączyć serwer wiedząc, mogę powrócić do mojej sesji w dokładnie takim samym stanie, jak przed.
Czy jest to w ogóle technicznie możliwe? Czy jest jakaś wbudowana funkcja, którą przeoczyłem?
EDYCJA: w oparciu o tę odpowiedź istnieje %store
magia, która powinna być „lekką marynatą”. Musisz jednak zapisywać zmienne ręcznie, w ten sposób:
#inside a ipython/nb session
foo = "A dummy string"
%store foo
zamykanie i ponowne uruchamianie jądra
%store -r foo
# r w celu odświeżenia
print(foo) # "A dummy string"
co jest dość bliskie temu, czego bym chciał, ale konieczność robienia tego ręcznie i niemożność rozróżnienia między różnymi sesjami sprawia, że jest mniej przydatna.
źródło
Odpowiedzi:
Myślę, że Dill dobrze odpowiedział na twoje pytanie.
Zapisz sesję Notatnika:
import dill dill.dump_session('notebook_env.db')
Przywróć sesję Notatnika:
import dill dill.load_session('notebook_env.db')
Źródło
źródło
(Wolę to skomentować, niż zaoferować to jako rzeczywistą odpowiedź, ale potrzebuję więcej reputacji, aby skomentować.)
Większość zmiennych typu danych można przechowywać w systematyczny sposób. Zwykle przechowuję wszystkie ramki danych, tablice itp. W pandas.HDFStore . Na początku zeszytu zadeklaruj
backup = pd.HDFStore('backup.h5')
a następnie zapisz wszystkie nowe zmienne w trakcie ich tworzenia
backup['var1'] = var1
Na koniec chyba dobry pomysł
przed wyłączeniem serwera. Następnym razem, gdy chcesz kontynuować korzystanie z notatnika:
backup = pd.HDFStore('backup.h5') var1 = backup['var1']
Prawdę mówiąc, wolałbym również wbudowaną funkcjonalność w notebooku ipython. W ten sposób nie można zapisać wszystkiego (np. Obiektów, połączeń), a przy tak dużej liczbie standardowych kodów trudno jest utrzymać porządek w notatniku.
źródło
To pytanie jest związane z: Jak cache'ować w IPython Notebook?
Aby zapisać wyniki poszczególnych komórek, przydaje się magia buforowania .
Podczas ponownego uruchamiania notatnika zawartość tej komórki jest ładowana z pamięci podręcznej.
To nie jest dokładna odpowiedź na twoje pytanie, ale może wystarczyć, gdy wyniki wszystkich długich obliczeń zostaną szybko odzyskane. To w połączeniu z wciśnięciem przycisku „wszystko” na górze notebooka jest dla mnie praktycznym rozwiązaniem.
Pamięć podręczna magia nie może zapisać stan całego notebooka jeszcze . O ile mi wiadomo, nie ma jeszcze innego systemu, aby wznowić „notebook”. Wymagałoby to zapisania całej historii jądra Pythona. Po załadowaniu notatnika i podłączeniu do jądra, te informacje powinny zostać załadowane.
źródło