Python verfügt über ein Serialisierungsmodul für Objekte namens pickle (cPickle). Ich denke, Gurke ist sehr berühmt. Tatsächlich gibt es auch ein ähnliches Modul namens Marschall. Das ist nicht sehr berühmt. Es ist kein dauerhaftes Modul, und die Kompatibilität zwischen den Versionen kann nicht garantiert werden. Es gibt also keinen Grund, Marschall zu verwenden. Es überrascht nicht, dass es nicht berühmt ist.
Marschall ist voller Nachteile im Vergleich zu Gurke, aber ich habe festgestellt, dass Marschall auch einige gute Punkte hat, also werde ich mich diesmal darauf konzentrieren. Das Gute am Marschall ist "Geschwindigkeit".
Lassen Sie uns sofort die Export- und Importgeschwindigkeiten überprüfen. Dieses Mal haben wir die Geschwindigkeiten von "c Pickle" und "Marschall" verglichen.
Schreiben Sie es zuerst auf.
#!/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()
Der Code sieht so aus. Ich generiere ein mehrdimensionales Array und schreibe es aus.
Werfen wir einen Blick auf die Ausgabe.
143.123441935 5.09839010239
Die linke ist cPickle, die rechte ist Marschall und die Einheit ist Sekunden. Es machte einen Unterschied mehr als ich erwartet hatte, es war unerwartet.
Als nächstes wird gelesen.
#!/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()
Der Code ist dies. Ich habe gerade Dump zum Laden gesetzt.
Klicken Sie hier für Ergebnisse
445.698551893 1.64994597435
In ähnlicher Weise ist die linke cPickle, die rechte ist Marschall und die Einheit ist Sekunden. Nun, es ist ein großer Unterschied ... Ich bin ziemlich überrascht.
Ja. Es stellt sich also heraus, dass der Marschall schneller ist. Ich habe den Grund dafür nicht untersucht.
Obwohl der Marschall in seiner Geschwindigkeit überlegen ist, ist eine Gurke, die ihn dauerhaft macht, äußerst praktisch. Wenn Sie ihn also verwenden, ist er immer noch eine Gurke. Warum hast du sie dann verglichen? Der einzige Grund ist, dass ich neugierig war.
Also habe ich Marschall ins Rampenlicht gerückt, den ich selten benutzen würde! Das ist alles für die Geschichte.
Recommended Posts