que - Casos de uso comunes para pickle en Python
python 3.6 pickle (8)
Algunos usos que he encontrado:
1) guardar los datos de estado de un programa en el disco para que pueda continuar donde lo dejó cuando se reinicie (persistencia)
2) enviar datos de Python a través de una conexión TCP en un sistema distribuido o multi-núcleo (clasificación)
3) almacenar objetos de Python en una base de datos
4) la conversión de un objeto python arbitrario a una cadena para que pueda ser utilizado como una clave de diccionario (por ejemplo, para el almacenamiento en memoria caché y la memorización).
Hay algunos problemas con el último - dos objetos idénticos pueden ser escabechados y resultar en diferentes cadenas - o incluso el mismo objeto escabechado dos veces puede tener representaciones diferentes. Esto se debe a que el pickle puede incluir información de conteo de referencia.
Ejemplo mínimo de ida y vuelta ..
>>> import pickle
>>> a = Anon()
>>> a.foo = ''bar''
>>> pickled = pickle.dumps(a)
>>> unpickled = pickle.loads(pickled)
>>> unpickled.foo
''bar''
Editar: pero en cuanto a la cuestión de los ejemplos reales de decapado, tal vez el uso más avanzado de decapado (tendrías que cavar bastante profundo en la fuente) es ZODB: http://svn.zope.org/
De lo contrario, PyPI menciona varios: http://pypi.python.org/pypi?:action=search&term=pickle&submit=search
Personalmente, he visto varios ejemplos de objetos en escabela que se envían a través de la red como un protocolo de transferencia de red fácil de usar.
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.
Lo he usado en uno de mis proyectos. Si la aplicación se terminó durante su funcionamiento (se realizó una larga tarea y se procesaron muchos datos), tuve que guardar toda la estructura de datos y volver a cargarla después de que la aplicación se ejecutara nuevamente. Usé cPickle para esto, ya que la velocidad era algo crucial y el tamaño de los datos era realmente grande.
Para agregar un ejemplo del mundo real: la herramienta de documentación de Sphinx para Python utiliza pickle para almacenar en caché documentos analizados y referencias cruzadas entre documentos, para acelerar las compilaciones posteriores de la documentación.
Para el principiante (como es el caso conmigo) es realmente difícil entender por qué usar pickle en primer lugar al leer la documentación oficial . Es tal vez porque los documentos implican que ya conoces el propósito de la serialización. Solo después de leer la descripción general de la serialización he entendido el motivo de este módulo y sus casos de uso común. También las explicaciones amplias de la serialización sin tener en cuenta un lenguaje de programación particular pueden ayudar: https://.com/a/14482962/4383472 , ¿Qué es la serialización? , https://.com/a/3984483/4383472
Pickle es como "Guardar como ..." y "Abrir ..." para sus estructuras de datos y clases. Digamos que quiero guardar mis estructuras de datos para que sea persistente entre las ejecuciones del programa.
Ahorro:
with open("save.p", "wb") as f:
pickle.dump(myStuff, f)
Cargando:
try:
with open("save.p", "rb") as f:
myStuff = pickle.load(f)
except:
myStuff = defaultdict(dict)
Ahora no tengo que volver a construir myStuff desde cero, y puedo elegir desde arriba desde donde lo dejé.
Puedo decirte los usos para los que lo uso y lo he visto utilizado:
- El perfil del juego se guarda
- Los datos del juego ahorran vidas y salud
- Registros previos de números de respuesta asignados a un programa
Esos son los que lo uso para al menos