He mirado la documentación de pickle , pero no entiendo dónde es útil pickle.
¿Cuáles son algunos casos de uso comunes para encurtidos?
python
serialization
pickle
use-case
satoru
fuente
fuente
Respuestas:
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 reinicia (persistencia)
2) envío de datos de python a través de una conexión TCP en un sistema distribuido o de múltiples núcleos (cálculo de referencias)
3) almacenar objetos de python en una base de datos
4) convertir un objeto python arbitrario en una cadena para que pueda usarse como clave de diccionario (por ejemplo, para el almacenamiento en caché y la memorización).
Hay algunos problemas con el último: dos objetos idénticos pueden ser encurtidos y dar lugar a diferentes cadenas, o incluso el mismo objeto encurtido dos veces puede tener diferentes representaciones. Esto se debe a que el pepinillo puede incluir información de recuento de referencia.
Para enfatizar el comentario de @ lunaryorn, nunca debe quitar una cadena de una fuente no confiable, ya que un pepinillo cuidadosamente diseñado podría ejecutar código arbitrario en su sistema. Por ejemplo, consulte https://blog.nelhage.com/2011/03/exploiting-pickle/
fuente
Ejemplo mínimo de ida y vuelta ..
Editar: pero en cuanto a la cuestión de los ejemplos de decapado en el mundo real, quizás el uso más avanzado de decapado (tendría que profundizar bastante 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 escabeche que se envían a través de la red como un protocolo de transferencia de red fácil de usar.
fuente
El decapado es absolutamente necesario para la computación distribuida y paralela.
Supongamos que desea hacer una reducción de mapa paralela con
multiprocessing
(o en todos los nodos del clúster con pyina ), luego debe asegurarse de que la función que desea asignar a través de los recursos paralelos se enredará. Si no se conserva en vinagre, no puede enviarlo a otros recursos en otro proceso, computadora, etc. También vea aquí un buen ejemplo.Para hacer esto, uso eneldo , que puede serializar casi cualquier cosa en python. Dill también tiene algunas buenas herramientas para ayudarlo a comprender qué está causando que su decapado falle cuando falla su código.
Y sí, la gente usa la selección para guardar el estado de un cálculo, o su sesión de ipython , o lo que sea.
fuente
Lo he usado en uno de mis proyectos. Si la aplicación se terminó durante su funcionamiento (realizó una tarea larga y procesó muchos datos), necesitaba guardar toda la estructura de datos y volver a cargarla después de que la aplicación se volviera a ejecutar. Utilicé cPickle para esto, ya que la velocidad era algo crucial y el tamaño de los datos era realmente grande.
fuente
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:
Cargando:
Ahora no tengo que volver a construir myStuff desde cero, y puedo continuar desde donde lo dejé.
fuente
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 . Tal vez sea porque los documentos implican que ya conoces el propósito completo de la serialización. Solo después de leer la descripción general de la serialización, he entendido la razón de este módulo y sus casos de uso comunes. También pueden ayudar las explicaciones amplias de la serialización sin tener en cuenta un lenguaje de programación particular: https://stackoverflow.com/a/14482962/4383472 , ¿Qué es la serialización? , https://stackoverflow.com/a/3984483/4383472
fuente
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.
fuente
Puedo decirte los usos para los que lo uso y lo he visto utilizado para:
Esos son los que lo uso por lo menos
fuente
Utilizo pickling durante el desguace web de un sitio web en ese momento. Quiero almacenar más de 8000k urls y quiero procesarlas lo más rápido posible, así que utilizo pickling porque su calidad de salida es muy alta.
puede llegar fácilmente a la URL y donde detiene incluso la palabra clave del directorio de trabajo también obtiene los detalles de la URL muy rápido para reanudar el proceso.
fuente