我在Python应用程序中使用Google。通过对protobufs的实验,我发现在基于CPP的python实现中,Protobuf消息的创建要比基于Python的Python实现慢得多。
与纯基于python的Protobuf消息创建相比,使用PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=cpp创建消息的速度要慢2-3倍。
这是意料之中吗?我发现SerializeToString和ParseFromString在cpp版本中都更快。随着消息大小的增加,每种情况下的差异都会扩大。
我正在使用python的标准timeit模块对这些任务进行计时。
(使用的2.4.1版)
发布于 2013-12-21 00:00:29
是的,我相信这是意料之中的。纯Python实现将所有字段存储在一个dict中。为了构造一个新消息,它实际上只是创建一个空的dict,它非常快。C++实现实际上在遮罩下初始化一个C++ DynamicMessage对象,然后包装它。DynamicMessage实际上是预先初始化所有字段的,所以即使它是用C++实现的,它也“比较慢”--但是这个前期初始化使以后的操作更快。
我相信通过编译protobuf对象的C++版本并将它们作为另一个扩展加载,可以进一步提高性能。如果我没记错的话,C++支持的protobuf实现将自动使用编译后的版本而不是DynamicMessage。
https://stackoverflow.com/questions/20701971
复制相似问题