serialización - python pickle function
Serialización Python-¿Por qué pickle? (3)
Entendí que el decapado de Python es una forma de ''almacenar'' un Objeto Python de una manera que respeta la programación de Objetos, diferente de una salida escrita en un archivo txt o DB.
¿Tiene más detalles o referencias sobre los siguientes puntos?
- ¿Dónde están ''almacenados'' los objetos en escabeche?
- ¿Por qué conservar una representación de objetos en conserva es más que, por ejemplo, almacenar en DB?
- ¿Puedo recuperar objetos en escabeche de una sesión de shell de Python a otra?
- ¿tienes ejemplos significativos cuando la serialización es útil?
- ¿la serialización con pickle implica datos de ''compresión''?
En otras palabras, estoy buscando un documento sobre decapado: Python.doc explica cómo implementar pickle pero no parece profundizar en los detalles sobre el uso y la necesidad de la serialización.
Decapado es una forma de convertir un objeto python (lista, dict, etc.) en una secuencia de caracteres. La idea es que esta secuencia de caracteres contenga toda la información necesaria para reconstruir el objeto en otra secuencia de comandos de python.
En cuanto a dónde se almacena la información en escabeche, por lo general uno haría:
with open(''filename'', ''wb'') as f:
var = {1 : ''a'' , 2 : ''b''}
pickle.dump(var, f)
Eso almacenaría la versión encurtida de nuestra var
dict en el archivo ''filename''. Luego, en otro script, puede cargar desde este archivo en una variable y el diccionario sería recreado:
with open(''filename'',''rb'') as f:
var = pickle.load(f)
Otro uso para el decapado es si necesita transmitir este diccionario a través de una red (tal vez con enchufes o algo así). Primero necesita convertirlo en un flujo de caracteres, luego puede enviarlo a través de una conexión de socket.
Además, no hay "compresión" de la que hablar aquí ... es solo una forma de convertir de una representación (en RAM) a otra (en "texto").
About.com tiene una buena introducción de decapado here .
El decapado es absolutamente necesario para la computación distribuida y paralela.
Digamos que quería hacer una reducción de mapa paralela con multiprocessing
(o entre nodos de clúster con pyina ), entonces necesita asegurarse de que la función que desea mapear a través de los recursos paralelos saldrá en vinagre. Si no funciona, no puede enviarlo a otros recursos en otro proceso, computadora, etc. También vea here un buen ejemplo.
Para hacer esto, uso dill , que puede serializar casi cualquier cosa en Python. Dill también tiene algunas buenas herramientas para ayudarlo a comprender qué causa que su decapado falle cuando falla su código.
Y, sí, la gente usa picking para guardar el estado de un cálculo, o su sesión de ipython , o lo que sea. También puede extender Pickle y UnPickler de pickle para hacer compresión con bz2
o gzip
si lo desea.
es una especie de serialización. use cPickle es mucho más rápido que Pickle.
import pickle
##make Pickle File
with open(''pickles/corups.pickle'', ''wb'') as handle:
pickle.dump(corpus, handle)
#read pickle file
with open(''pickles/corups.pickle'', ''rb'') as handle:
corpus = pickle.load(handle)