小编Sha*_*gde的帖子

如何序列化包含 proto 对象的 python 对象?

假设我有一个像这样的 python 类:

import pickle
import msg_pkt_pb2

class Solver(object):
  def __init__(self, proto_objs:msg_pkt_pb2.MessagePackets, _obj_fn=lambda x,y:(x - y)**2):
    self._proto_objs = proto_objs
    self.num_iterations = 0
    self.num_pass = 0
    self._obj_fn = _obj_fn
  
  def solve_or_die(self):
    try:
      ...
      _obj_fn(a, b)
    except:
      self._make_ckpt()

  def _make_ckpt(self):
    f = open('ckpt.pkl', 'wb')
    pickle.dump(self, f)
    f.close()
  
  def load_from_ckpt(self, filename):
    ...
Run Code Online (Sandbox Code Playgroud)

原型:

message MessagePkt {
   string name=1;
   int32 id=2;
   string payload=3;
}

message MessagePackets{
   int32 id=1;
   repeated MessagePacket message_pkts=2;
}
Run Code Online (Sandbox Code Playgroud)

我想序列化这个包含原型对象(部分填充)的对象,不幸的是,当我尝试序列化这个对象时,我得到一个异常:


_pickle.PicklingError: Can't pickle <class 'msg_pkt_pb2.MessagePackets'>: it's not the same object as …
Run Code Online (Sandbox Code Playgroud)

python pickle protocol-buffers

5
推荐指数
0
解决办法
543
查看次数

标签 统计

pickle ×1

protocol-buffers ×1

python ×1