138 votes

Cas d'utilisation courants des cornichons en Python

J'ai consulté la documentation sur les cornichons , mais je ne comprends pas en quoi il est utile.

Quels sont les cas d'utilisation courants de pickle?

65voto

Dave Kirby Points 12310

Certaines utilisations que j'ai rencontré:

1) l'enregistrement d'un programme de l'état des données sur le disque de sorte qu'il peut porter sur l'endroit où il l'avait laissé lors du redémarrage (persistance)

2) envoi de python de données sur une connexion TCP dans un multi-core ou un système distribué (marshalling)

3) le stockage des objets python dans une base de données

4) la conversion de l'arbitraire d'un objet python pour une chaîne de sorte qu'il peut être utilisé comme une clé de dictionnaire (par exemple, pour la mise en cache et memoization).

Il ya quelques problèmes avec le dernier - deux objets identiques peuvent être marinés et se traduire par des cordes, ou même le même objet marinés à deux reprises peuvent avoir des représentations différentes. C'est parce que le cornichon peut inclure une référence informations de comptage.

11voto

Jacob Oscarson Points 4275

Minimes aller-retour exemple..

>>> import pickle
>>> a = Anon()
>>> a.foo = 'bar'
>>> pickled = pickle.dumps(a)
>>> unpickled = pickle.loads(pickled)
>>> unpickled.foo
'bar'

Edit: mais comme pour la question des exemples du monde réel de décapage, peut-être la plus avancée de l'utilisation de décapage (vous devez avoir à creuser assez profondément dans le source) est la ZODB: http://svn.zope.org/

Sinon, PyPI mentionne plusieurs: http://pypi.python.org/pypi?:action=search&term=pickle&submit=search

Personnellement, j'ai vu plusieurs exemples de marinés objets envoyés sur le réseau comme un outil facile à utiliser le réseau de protocole de transfert.

8voto

taskinoor Points 24438

Je l'ai utilisé dans l'un de mes projets. Si l'application a été arrêtée pendant son fonctionnement (la tâche a été longue et a traité beaucoup de données), je devais sauvegarder la structure de données complète et la recharger après la réexécution de l'application. J'ai utilisé cPickle pour cela, car la vitesse était une chose cruciale et la taille des données très volumineuse.

8voto

Mike McKerns Points 965

Le décapage est absolument nécessaire pour le calcul distribué et parallèle.

Dire que tu voulais faire un parallèle map-reduce avec multiprocessing (ou sur les nœuds de cluster avec pyina), alors vous devez vous assurer que la fonction que vous voulez avoir mappé à travers le parallèle ressources cornichon. Si ce n'est pas pickle, vous ne pouvez pas l'envoyer à d'autres ressources disponibles sur un autre processus, ordinateur, etc. Voir aussi ici pour un bon exemple.

Pour ce faire, j'utilise l'aneth, qui peut sérialiser presque rien en python. L'aneth a aussi quelques bons outils pour vous aider à comprendre ce qui est à l'origine de marinade à l'échec lorsque votre code ne fonctionne pas.

Et, oui, les gens utilisent de la cueillette à sauvegarder l'état d'un calcul, ou votre ipython session, ou quoi que ce soit.

3voto

lunaryorn Points 13621

Pour ajouter un exemple concret : L'outil de documentation Sphinx pour Python utilise pickle pour mettre en cache les documents analysés et les références croisées entre documents afin d'accélérer les générations suivantes de la documentation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X