Welcher Unterschied zwischen Pickle und _pickle in python 3?

Ich bin neu in Python und möchte implementieren schnelle Objekt Serialisierung. Ich habe versucht, json zu benutzen, aber es war zu langsam, auch versuchte, das Marshall-Modul zu benutzen, aber die Größe der Objekte, die von Marschall 6-7 mal mehr als Gurke serialisiert wurden, also entschied ich mich, Pickle in meinem Projekt zu verwenden. Ich lese über cPickle-Modul, lese, dass es ziemlich schnell, aber es gibt kein solches Modul in Python 3 und docs sagt, dass Modul namens _pickle in C geschrieben ist. Also in meinen Projekten, die ich benutze

import _pickle as pickle 

Ist ein Unterschied zwischen Pickle und _pickle? Wie kann ich schnellere Objekte serialisieren / Deserialisierung implementieren?

2 Solutions collect form web for “Welcher Unterschied zwischen Pickle und _pickle in python 3?”

Das pickle Modul importiert bereits _pickle falls vorhanden. Es ist die C-optimierte Version des pickle Moduls und wird transparent verwendet.

Aus dem pickle.py Quellcode :

 # Use the faster _pickle if possible try: from _pickle import * except ImportError: Pickler, Unpickler = _Pickler, _Unpickler 

Und aus der pickle Modul-Dokumentation :

Das pickle Modul hat einen transparenten Optimierer ( _pickle ), der in C geschrieben ist. Er wird immer verfügbar. Ansonsten wird die reine Python-Implementierung verwendet.

In Python 2 wurde _pickle als cPickle , wurde aber aktualisiert, um die transparente Verwendung als Implementierungsdetail zu ermöglichen.

Aus dem Abschnitt " Bibliotheksänderungen" im Abschnitt " Was ist neu in der Python 3.0- Dokumentation"

Ein gemeinsames Muster in Python 2.x ist es, eine Version eines Moduls in reinen Python implementiert zu haben, wobei eine optionale beschleunigte Version als C-Erweiterung implementiert ist. Zum Beispiel cPickle und cPickle . Dies stellt die Last des Importes der beschleunigten Version und fallen auf die reine Python-Version auf jedem Benutzer dieser Module zurück. In Python 3.0 werden die beschleunigten Versionen als Implementierungsdetails der reinen Python-Versionen betrachtet. Benutzer sollten immer die Standardversion importieren, die versucht, die beschleunigte Version zu importieren und fällt zurück in die reine Python-Version. Das pickle / cPickle Paar erhielt diese Behandlung. Das Profilmodul befindet sich auf der Liste für 3.1. Das StringIO Modul wurde in eine Klasse im io-Modul umgewandelt.

Da es sich um eine Python-Konvention handelt, dass die Implementierungsdetails mit einem Unterstrich vorangestellt werden, wurde cPickle _pickle . Dies bedeutet, dass, wenn Sie importieren _pickle , die API hat keinen garantierten Vertrag und könnte rückwärts-Kompatibilität in zukünftigen Releases von python3, so unwahrscheinlich, wie das sein kann.

  • Django Rest Framework ModelSerializer Set Attribut auf create
  • Konfigurationsdatei mit Liste der Schlüsselwertpaare in Python
  • KDTree-Objekt in Python speichern?
  • Json.dumps (): escaping forward schrägstriche
  • Wie man Hash-Objekte in Python serialisiert
  • Python-Gurke nicht eins zu eins: verschiedene Gurken geben das gleiche Objekt
  • Python - String zur Auflistung
  • Speichern von Dataframe mit Array-Einträgen
  • Verwenden Sie Pyserial, um Zeit gegen Spannung von einem Arduino Serial Port zu zeichnen
  • Liste der Objekte zu JSON mit Python
  • Ist numpy.save Cross-Plattform?
  • Python ist die beste Programmiersprache der Welt.