Diminuer la taille des objets cPickle
Je suis en cours d'exécution du code qui crée des objets volumineux, contenant plusieurs classes définies par l'utilisateur, qui je dois alors sérialiser pour une utilisation ultérieure. De ce que je peux dire, seulement le décapage est suffisamment polyvalent pour mes besoins. J'ai été en utilisant cPickle pour les stocker, mais les objets qu'il génère sont environ 40G de taille, à partir du code qui s'exécute dans 500 mo de mémoire. La vitesse de la sérialisation n'est pas un problème, mais la taille de l'objet. Existe-il des conseils ou d'autres processus que je peux utiliser pour faire les cornichons petits?
source d'informationauteur ddn
Vous devez vous connecter pour publier un commentaire.
Si vous devez utiliser un cornichon et aucune autre méthode de sérialisation qui fonctionne pour vous, vous pouvez toujours la pipe le cornichon par
bzip2
. Le seul problème est quebzip2
est un peu slowish...gzip
devrait être plus rapide, mais la taille du fichier est presque 2x plus grand:Nous voyons donc que la taille du fichier de la
bzip2
est presque 40x plus petits,gzip
est 20x plus petits. Et gzip est assez proche de performances brutes cPickle, comme vous pouvez le voir:Vous pouvez combiner votre cPickle
dump
appel avec un zipfile:Et de re-charger une zippée marinés objet:
Vous pourriez vouloir utiliser un plus efficace de décapage protocole.
Comme de maintenant, il y a trois pickle protocoles:
et, en outre, le protocole par défaut est 0, la moins efficace:
Nous allons vérifier la différence de taille entre l'utilisation de la dernière protocole, qui est actuellement le protocole 2 (la plus efficace) et utilisant le protocole de 0 (par défaut) pour un exemple au hasard. Notez que j'utilise le protocole=-1 ici, pour nous assurer de toujours utiliser la dernière protocole, et que je l'importation cPickle pour nous assurer d'utiliser la plus rapide C mise en œuvre:
L'impression que je reçois est:
Indiquant que le décapage à l'aide de l'ancien protocole utilisé 2172KB, le décapage en utilisant le nouveau protocole utilisé 782KB et la différence est un facteur de x2.8. Notez que ce facteur est spécifique à cet exemple - vos résultats peuvent varier, en fonction de l'objet sont de décapage.