是否可以使用pickle序列化某个对象并在Python3中的其他独立模块中使用它?

时间:2017-11-23 16:13:44

标签: python sockets serialization pickle

我有2个独立文件: 第一个是 client.py ,在其中我应该使用记录创建一些对象,然后使用pickle类对其进行序列化,然后使用socket将其发送到第二个文件这是 server.py ,服务器应该将此字节对象反序列化为原始对象

client.py:

from pyrecord import Record
import pickle

clientSock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
clientSock.connect(("localhost",48621))
Message1Obj=Record.create_type('Message1Obj','name','address')
message1Data = Message1Obj("KB","aa")
message1Serlization = pickle.dumps(message1Data)
clientSock.send(message1Serlization)

server.py

sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.bind(("localhost",48621))
sock.listen(5)
con,adr = sock.accept()

message1 = con.recv(8192)
Message1Obj = pickle.loads(message1)

但是我在servers.py上发现了这个错误:

AttributeError:无法获取属性' Message1Obj'在模块' 主要'来自' server.py'

我从之前的答案中了解到pickle.dump还保存了对象所在的模块,是否可以在其他模块中加载序列化对象?

1 个答案:

答案 0 :(得分:0)

我没有使用pickle来序列化,而是使用dill来序列化 我的python对象并以二进制字符串格式通过服务器发送。

message1Data = {'A message or function/class object'}
 import dill
 s_data = dill.dumps(message1Data)

通过某个套接字发送到服务器并在那里反序列化

org_data = dill.loads(s_data)