首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于C++的python实现Google的性能

基于C++的python实现Google的性能
EN

Stack Overflow用户
提问于 2013-12-20 10:52:29
回答 1查看 4.3K关注 0票数 2

我在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版)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-21 00:00:29

是的,我相信这是意料之中的。纯Python实现将所有字段存储在一个dict中。为了构造一个新消息,它实际上只是创建一个空的dict,它非常快。C++实现实际上在遮罩下初始化一个C++ DynamicMessage对象,然后包装它。DynamicMessage实际上是预先初始化所有字段的,所以即使它是用C++实现的,它也“比较慢”--但是这个前期初始化使以后的操作更快。

我相信通过编译protobuf对象的C++版本并将它们作为另一个扩展加载,可以进一步提高性能。如果我没记错的话,C++支持的protobuf实现将自动使用编译后的版本而不是DynamicMessage

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20701971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档