我正在编写一个Python程序,需要处理许多小但复杂的protobuf编码消息。我尝试使用纯Python编写的协议缓冲区的Python实现,但其性能真的很差。
因此,我正在研究一种解决方案,显然有些人已经成功了 - 使用protoc生成C++文件,然后使用swig将它们包装到Python中。问题是我无法获得可工作的Python模块。
非常感谢!
因此,我正在研究一种解决方案,显然有些人已经成功了 - 使用protoc生成C++文件,然后使用swig将它们包装到Python中。问题是我无法获得可工作的Python模块。
当使用
-includeall
运行swig时,为了确保生成的消息类使用的所有Google基础/实用程序类也被包装 - swig失败,抱怨缺少系统包含文件(例如“string”)。我无法通过-I标志或复制整个包含目录来解决这个问题。环境是Ubuntu 10.04,protobuf 2.2.0,swig 1.3.40,gcc 4.4.3。没有此标志,我可以为我的消息类生成一个python模块,但这个模块是无用的:生成的Python消息类缺少Message基类提供的所有函数 - 特别是除一个之外的所有反序列化方法。剩下的一个方法(MergePartialFromCodedStream)不会运行,因为它需要类型为CodedInputStream的输入流(它是protobuf基础设施的一部分,因此没有被swig包装)。
我想知道是否有人有一个工作示例,可以在protobuf-C++之上使用swig?
或者 - 是否有其他解决方案的示例,例如在同一页中提到的Python扩展?虽然这似乎是一种高维护解决方案,适用于我的动态架构...
如果这些都不起作用,我考虑放弃Python,转而使用Groovy——假设Java实现的协议缓冲区会更有效率。对此有何评论吗?非常感谢!