在分析caffe2源码的过程当中,因为caffe2使用protobuf做为网络结构和网络参数序列化和反序列化的机制,想在反序列化以前进行加解密处理,这是反向protouf其实有两个版本的实现来进行消息的解析。 python
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的实现,全部会发现效率更高。 c++