Pickle-Modul in Python: Objektserialisierung und -deserialisierung

Die Serialisierung und Deserialisierung von Objekten ist eine häufige Aufgabe in Python. Das Pickle-Modul bietet eine einfache und leistungsstarke Möglichkeit zum Serialisieren und Deserialisieren von Objekten und ermöglicht Entwicklern die einfache Konvertierung komplexer Python-Objekte in Bytestreams und deren Wiederherstellung bei Bedarf. In diesem Artikel werden die Verwendung und das Prinzip des Pickle-Moduls ausführlich vorgestellt und seine Anwendung in der Datenpersistenz und prozessübergreifenden Kommunikation erörtert.

Grundlegende Verwendung des Pickle-Moduls

Die Verwendung des Pickle-Moduls ist sehr einfach. Hier ist ein einfaches Beispiel:

import pickle

# 序列化对象
data = {
    
    'name': 'Alice', 'age': 25}
serialized_data = pickle.dumps(data)

# 反序列化对象
deserialized_data = pickle.loads(serialized_data)

# 打印反序列化后的对象
print(deserialized_data)

Im obigen Code verwenden wir zunächst pickle.dumps()die Funktion, um ein Python-Objekt in einen Byte-Stream zu serialisieren, und verwenden dann pickle.loads()die Funktion, um den Byte-Stream in ein Python-Objekt zu deserialisieren. Zum Schluss drucken wir das deserialisierte Objekt.

So funktioniert das Pickle-Modul

Das Arbeitsprinzip des Pickle-Moduls besteht darin, die Serialisierung durch Konvertieren des Objekts in einen Bytestrom und anschließend die Deserialisierung durch Lesen des Bytestroms zu realisieren. Während des Serialisierungsprozesses durchläuft Pickle rekursiv alle Mitglieder des Objekts und wandelt sie in einen Bytestrom um. Während der Deserialisierung rekonstruiert Pickle das Originalobjekt basierend auf der Struktur des Bytestreams.

Häufige Anwendungsszenarien des Pickle-Moduls

Datenpersistenz

Mit dem Pickle-Modul können Python-Objekte zur Datenpersistenz in Dateien auf der Festplatte gespeichert werden. Dies ist nützlich für Anwendungen, die eine langfristige Speicherung und Wiederherstellung von Objekten erfordern. Beispielsweise können wir eine komplexe Datenstruktur in einen Bytestrom serialisieren und in einer Datei speichern:

import pickle

data = {
    
    'name': 'Alice', 'age': 25}

# 将对象序列化并保存到文件
with open('data.pkl', 'wb') as file:
    pickle.dump(data, file)

# 从文件中加载并反序列化对象
with open('data.pkl', 'rb') as file:
    deserialized_data = pickle.load(file)

print(deserialized_data)

Interprozesskommunikation

Mit dem Pickle-Modul lässt sich auch eine prozessübergreifende Kommunikation realisieren

, um ein Objekt von einem Prozess an einen anderen zu übergeben. Indem wir ein Objekt in einen Bytestream serialisieren, können wir es an einen anderen Prozess senden und das Objekt auf der Empfängerseite rekonstruieren. Dies ist in verteilten Systemen und parallelem Rechnen sehr nützlich.

import pickle
from multiprocessing import Process, Pipe

def worker(conn):
    # 从管道接收对象
    data = conn.recv()

    # 反序列化对象
    deserialized_data = pickle.loads(data)

    print(deserialized_data)

# 创建管道和子进程
parent_conn, child_conn = Pipe()
p = Process(target=worker, args=(child_conn,))
p.start()

# 将对象序列化并发送到子进程
data = {
    
    'name': 'Alice', 'age': 25}
serialized_data = pickle.dumps(data)
parent_conn.send(serialized_data)

p.join()

Im obigen Code erstellen wir eine Pipe und empfangen und deserialisieren das durch die Pipe im untergeordneten Prozess gesendete Objekt.

Hinweise zum Pickle-Modul

Bei der Verwendung des Pickle-Moduls müssen Sie auf folgende Punkte achten:

  1. Das Pickle-Modul funktioniert nur mit Python-spezifischen Objekten und kann keine Objekte aus anderen Sprachen serialisieren.

  2. Bei der Serialisierung und Deserialisierung muss sichergestellt werden, dass die entsprechenden Klassen- und Funktionsdefinitionen an beiden Enden verfügbar sind.

  3. Da das Pickle-Modul den Code während der Deserialisierung ausführt, besteht ein Sicherheitsrisiko. Laden Sie daher keine Pickle-Daten aus nicht vertrauenswürdigen Quellen.

Guess you like

Origin blog.csdn.net/ekcchina/article/details/131329856