Cómo encurtir o almacenar la sesión del cuaderno Jupyter (IPython) para más adelante

Digamos que estoy haciendo un análisis de datos más grande en el cuaderno Jupyter / Ipython con una gran cantidad de cómputos que requieren mucho tiempo. Luego, por alguna razón, tengo que cerrar el servidor local jupyter I, pero me gustaría volver a hacer el análisis más adelante, sin tener que pasar por todos los cálculos que requieren mucho tiempo de nuevo.


Lo que me gustaría hacer es hacer pickle o almacenar toda la sesión de Jupyter (todos los marcos de datos de pandas, np.arrays, variables, …) para poder cerrar el servidor de forma segura sabiendo que puedo regresar a mi sesión exactamente en el mismo estado como antes.

¿Es técnicamente posible? ¿Hay una funcionalidad incorporada que pasé por alto?


EDITAR: basado en esta respuesta hay un %store magic que debería ser “pickle ligero”. Sin embargo tienes que almacenar las variables manualmente de esta manera:

#inside a ipython/nb session
foo = "A dummy string"
%store foo
cerrando la vista, reiniciando el kernel
%store -r foo # r para actualizar
print(foo) # "A dummy string"

que está bastante cerca de lo que me gustaría, pero tener que hacerlo manualmente y no poder distinguir entre diferentes sesiones lo hace menos útil.

Creo que Dill responde bien a tu pregunta.

 pip install dill 

Guardar una sesión de Notebook:

 import dill dill.dump_session('notebook_env.db') 

Restaurar una sesión de Notebook:

 import dill dill.load_session('notebook_env.db') 

Fuente

(Prefiero comentar que ofrecer esto como una respuesta real, pero necesito más reputación para comentar).

Puede almacenar la mayoría de las variables de datos de forma sistemática. Lo que normalmente hago es almacenar todos los marcos de datos, matrices, etc. en pandas.HDFStore . Al comienzo del cuaderno, declarar.

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

y luego almacena las nuevas variables a medida que las produzcas

 backup['var1'] = var1 

Al final, probablemente sea una buena idea hacer.

 backup.close() 

Antes de apagar el servidor. La próxima vez que quieras continuar con el cuaderno:

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

A decir verdad, prefiero la funcionalidad incorporada en el portátil ipython, también. No puede guardar todo de esta manera (por ejemplo, objetos, conexiones), y es difícil mantener el portátil organizado con tantos códigos de repetición.

Esta pregunta está relacionada con: ¿Cómo se almacena en caché en IPython Notebook?

Para guardar los resultados de celdas individuales, la magia del almacenamiento en caché es muy útil.

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

Al volver a ejecutar el cuaderno, el contenido de esta celda se carga desde la memoria caché.

Esto no es exactamente responder a su pregunta, pero podría ser suficiente para cuando los resultados de todos los largos cálculos se recuperen rápidamente. Esto, en combinación con golpear el botón Run-All en la parte superior del portátil, es para mí una solución viable.

La magia del caché no puede guardar el estado de un cuaderno entero todavía . Que yo sepa, todavía no hay otro sistema para reanudar un “cuaderno”. Esto requeriría guardar toda la historia del kernel de Python. Después de cargar el cuaderno y conectarse a un kernel, se debe cargar esta información.