Über Python Pickle (cPickle) und Marschall

Einführung

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

Geschwindigkeit prüfen

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.

Zusammenfassung

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

Über Python Pickle (cPickle) und Marschall
Informationen zu Python-Objekten und -Klassen
Informationen zu Python-Variablen und -Objekten
Über Python, len () und randint ()
Informationen zu Python-Datums- und Zeitzone
Über Python und reguläre Ausdrücke
Informationen zu Python- und Betriebssystemoperationen
Python # Über Referenz und Kopie
Über Python sort () und reverse ()
Informationen zur Installation der Serien Pwntools und Python2
Über Python-Diktat und sortierte Funktionen
[Python] Über Executor und zukünftige Klassen
Über Python, aus und importieren, als
Über _ und __
Eine Geschichte über Python Pop und Append
Apropos alte und neue Klassen in Python
Apropos Python-Klassenattribute und Metaklassen
Über Python-Slices
Über die Einschlussnotation von Python
Über Python tqdm.
Über die Python-Ausbeute
Über Python, Klasse
Informationen zur Python-Vererbung
Über Python, range ()
Über Python Decorator
Informationen zur Python-Referenz
Über Python-Dekorateure
[Python] Über Multi-Prozess
Denken Sie an Suchvorgänge mit Tiefenpriorität und Breitenpriorität in Python
Über den Unterschied zwischen "==" und "is" in Python
Eine Geschichte über das Ändern von Python und das Hinzufügen von Funktionen
[Python] Erfahren Sie mehr über asynchrone Programmierung und Ereignisschleifen
Über flache und tiefe Kopien von Python / Ruby
[Python] Komprimieren und dekomprimieren
Über Python für Schleife
Erste Schritte mit Python3 # 2 Erfahren Sie mehr über Typen und Variablen
Über Klasse und Instanz
Python- und Numpy-Tipps
[Python] Pip und Wheel
Python Iterator und Generator
Python-Pakete und -Module
Vue-Cli- und Python-Integration
[Python] Memo über Funktionen
Zusammenfassung über Python3 + OpenCV3
Über Cumprod und Cummax
Über Python für ~ (Bereich)
Python-Eingabe und Ausgabe
[Python] Memo Über Fehler
Python und Ruby teilen sich
Informationen zur Python-Entwicklungsumgebung
Python: Über Funktionsargumente
Notizen im Python Pickle-Format
Python, über die Ausnahmebehandlung
Über Python Pyramid Traversal
Informationen zum Erstellen und Ändern von benutzerdefinierten Designs für Python IDLE
Über Python3 ... (Ellipsenobjekt)
[Python] Kapitel 01-01 Über Python (Erster Python)