À propos de Python Pickle (cPickle) et Marshal

introduction

Python a un module de sérialisation pour les objets appelé pickle (cPickle). Je pense que le cornichon est très célèbre. En fait, il existe également un module similaire appelé marshal. Ce n'est pas très connu. Ce n'est pas un module persistant et la compatibilité entre les versions n'est pas garantie, il n'y a donc aucune raison d'utiliser marshal. Sans surprise, ce n'est pas célèbre.

Le maréchal est plein d'inconvénients par rapport au cornichon, mais j'ai trouvé que le maréchal a aussi quelques bons points, donc cette fois je vais me concentrer sur cela. La bonne chose à propos de marshal est la "vitesse".

Vérifier la vitesse

Vérifions immédiatement les vitesses d'exportation et d'importation. Cette fois, nous avons comparé les vitesses de "c Pickle" et "marshal".

Tout d'abord, écrivez-le.

#!/usr/bin/env python
# -- coding:utf-8 -*-
import marshal
import cPickle as pickle
import time
import numpy as np


def main():
    a = np.ndarray(shape=(10000, 10000))
    start = time.time()
    pickle.dump(a, open('output.pkl', 'wb'))
    p_time = time.time() - start
    start = time.time()
    marshal.dump(a, open('output.msl', 'wb'))
    m_time = time.time() - start
    print p_time, m_time

if __name__ == '__main__':
    main()

Le code ressemble à ceci. Je génère un tableau multidimensionnel et je l'écris.

Jetons un coup d'œil à la sortie.

143.123441935 5.09839010239

La gauche est cPickle, la droite est marshal et l'unité est secondes. Cela a fait une différence plus que ce à quoi je m'attendais, c'était inattendu.

Vient ensuite la lecture.

#!/usr/bin/env python
# -- coding:utf-8 -*-
import marshal
import cPickle as pickle
import time
import numpy as np


def main():
    start = time.time()
    a = pickle.load(open('output.pkl', 'rb'))
    p_time = time.time() - start
    start = time.time()
    b = marshal.load(open('output.msl', 'rb'))
    m_time = time.time() - start
    print p_time, m_time

if __name__ == '__main__':
    main()

Le code est le suivant. Je viens de mettre le vidage à charger.

Cliquez ici pour les résultats

445.698551893 1.64994597435

De même, la gauche est cPickle, la droite est marshal et l'unité est secondes. Eh bien, c'est une énorme différence ... Je suis assez surpris.

Résumé

Oui. Il s'avère donc que le maréchal est plus rapide en vitesse. Je n'ai pas enquêté sur la raison.

Cependant, bien que le maréchal soit supérieur en vitesse, le cornichon qui le rend permanent est extrêmement pratique, donc si vous l'utilisez, c'est toujours du cornichon. Alors pourquoi les avez-vous comparés? La seule raison est que j'étais curieux.

J'ai donc mis en lumière le maréchal, que j'utiliserais rarement! C'est tout pour l'histoire.

Recommended Posts

À propos de Python Pickle (cPickle) et Marshal
À propos des objets et des classes Python
À propos des variables et des objets Python
À propos de Python, len () et randint ()
À propos de la date et du fuseau horaire Python
À propos de Python et des expressions régulières
À propos des opérations Python et OS
Python # À propos de la référence et de la copie
À propos de Python sort () et reverse ()
À propos de l'installation des séries Pwntools et Python2
À propos de Python dict et des fonctions triées
[Python] À propos des classes Executor et Future
À propos de Python, à partir et à l'importation, comme
À propos de _ et __
Une histoire sur Python pop and append
Parler d'anciennes et de nouvelles classes en Python
Parler des attributs de classe Python et des métaclasses
À propos des tranches Python
À propos de la notation d'inclusion de python
À propos de Python tqdm.
À propos du rendement Python
À propos de python, classe
À propos de l'héritage Python
À propos de python, range ()
À propos de Python Decorator
À propos de la référence Python
À propos des décorateurs Python
[Python] À propos du multi-processus
Pensez aux recherches de priorité de profondeur et de priorité de largeur en Python
À propos de la différence entre "==" et "is" en python
Une histoire sur la modification de Python et l'ajout de fonctions
[Python] En savoir plus sur la programmation asynchrone et les boucles d'événements
À propos des copies superficielles et profondes de Python / Ruby
[python] Compresser et décompresser
À propos de Python for loop
Premiers pas avec python3 # 2 En savoir plus sur les types et les variables
À propos de la classe et de l'instance
Astuces Python et Numpy
[Python] pip et roue
Itérateur et générateur Python
Paquets et modules Python
Intégration Vue-Cli et Python
[Python] Mémo sur les fonctions
Résumé sur Python3 + OpenCV3
À propos de cumprod et cummax
À propos de Python, pour ~ (plage)
entrée et sortie python
[Python] Mémo sur les erreurs
Python et Ruby se séparent
À propos de l'environnement de développement Python
Python: à propos des arguments de fonction
Notes sur le format Python Pickle
Python, à propos de la gestion des exceptions
À propos de Python Pyramid Traversal
À propos de la création et de la modification de thèmes personnalisés pour Python IDLE
À propos de Python3 ... (objet Ellipsis)
[Python] Chapitre 01-01 À propos de Python (First Python)