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é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.
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