gpt4 book ai didi

c++ - 基于 C++ 的 Google Protobuf python 实现的性能

转载 作者:搜寻专家 更新时间:2023-10-31 01:06:30 28 4
gpt4 key购买 nike

我在我的 Python 应用程序中使用 Google Protobuf。通过对 protobufs 进行试验,我发现与基于 Python 的 Python 实现相比,基于 CPP 的 python 实现中 Protobuf 消息创建要慢得多。

与基于纯 Python 的 Protobuf 消息创建相比,使用 PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=cpp 创建消息最多慢 2-3 倍。

这是预期的吗?我发现 SerializeToString 和 ParseFromString 在 cpp verison 中都更快。随着消息大小的增加,每种情况下的差异都会扩大。

我正在使用 python 的标准 timeit 模块来为这些任务计时。

(使用google protobuf 2.4.1版本)

最佳答案

是的,我相信这是意料之中的。纯 Python 实现将所有字段存储在字典中。要构造一条新消息,它本质上只是创建一个空字典,速度非常快。 C++ 实现实际上在底层初始化了一个 C++ DynamicMessage 对象,然后将其包装起来。 DynamicMessage 实际上会预先初始化所有字段,因此即使它是用 C++ 实现的,它也“较慢”——但这种预先初始化会使后续操作更快。

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

关于c++ - 基于 C++ 的 Google Protobuf python 实现的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20701971/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com