1、Protobuf 简介

Protocol Buffers(简称 Protobuf),是Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,可用于数据存储、数据交换、通信协议等方面。相比于它的前辈XML、Json,它的体量更小,解析速度更快,所以在业内获得了广泛的应用。

在多智能体强化学习过程中,由于多个Agent位于不同的节点之上,构成了分布式系统,往往需要通过protobuf形式的数据进行交互,如果protobuf的版本不合适,很容易出现报错:

If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0.
If you cannot immediately regenerate your protos, some other possible workarounds are:
1、Downgrade the protobuf package to 3.20.x or lower.
2、Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower).

中文含义是:

如果此调用来自_pb2.py文件,则生成的代码已过期,必须使用protocol>=3.19.0重新生成。

如果你不能立即再生你的protos,其他一些可能的解决方法是:

1、将protobuf包降级至3.20.x或更低。

2、设置PROTOCOL_BUFFERS_PYTHON_ECTION=PYTHON(但这将使用纯PYTHON解析,速度会慢得多)。

2、解决办法

要使用Protobuf,我们首先需要定义我们要传输的消息。消息在.proto文件内定义。要将.proto编译为Python对象,我们将使用Protobuf编译器protoc,从而生成*_pb2.py。例如:student.proto 可以生成 student_pb2.py 文件。

需要注意的是:Protobuf存在两个版本,即proto2和proto3,但proto2和proto3生成的代码都是_pb2.py这个后缀。

当前我所使用的版本是:protobuf 4.23.0,版本过高了,应该降低版本。解决方法如下所示:

第一步,先卸载protocol模块:

pip uninstall protocol

第二步,安装指定版本的protocol:

pip install protocol==3.19.0