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.

  • Wie mache ich einfach eine serialisierbare Klasse
  • XML-Datei aus Modelldaten generieren
  • Wie man ein Python dict to Text, in einer menschlich lesbaren Weise zu serialisieren?
  • Serialisierung von SQLAlchemy-Modellen für eine REST-API unter Beachtung der Zugriffskontrolle?
  • Serialize C ++ - Objekt zum Senden über Sockets an Python - besten Ansatz?
  • Serialisierung der python-Objektinstanz an JSON
  • Typisierte JSON Serialisierung / Deserialisierung in Python
  • Wie kann ich beschleunigen, um große Objekte zu entfernen, wenn ich viel RAM habe?
  • Django.rest_framework: Wie serialisiere man zu vielen zu vielen?
  • Django-Serialisierung des geerbten Modells
  • Django Rest Rahmen Benutzer Registrierung?
  • Python ist die beste Programmiersprache der Welt.