在分析caffe2源码的过程中,由于caffe2使用protobuf作为网络结构和网络参数序列化和反序列化的机制,想在反序列化之前进行加解密处理,这是反向protouf其实有两个版本的实现来进行消息的解析。
protobuf 中对消息的解析有两个版本,一个是python版本,另外一个是c++版本。python版本相关的代码存放路径在:./python/google/protobuf/internal/python_message.py 中,而c++实现版本存放路径在:./python/google/protobuf/pyext/message.cc ,在python目录下有一个setup.py文件,里面有一个--cpp_implemetation选项,这个选项可以控制使用cpp的实现还是使用python的实现来进行消息的解析(序列化和反序列化),默认这个选项是关闭的,所以如果从源代码安装protobuf,那么就会默认使用python的实现来进行消息的解析,这时会发现解析的性能变慢。如果用pip安装的protobuf来进行消息的解析,默认采用的是cpp的实现,所有会发现效率更高。