使用Python的protocolbuffers add()方法非常慢
我正在使用协议缓冲区来创建一条非常大的消息 我有一个包含200个子元素的重复元素。然后每个子元素在另一个重复的字段中有将近2000个子元素 问题是,我的代码花了大约4.676秒执行protobuf add方法,将这些子消息添加到重复的字段中使用Python的protocolbuffers add()方法非常慢,python,binary,protocol-buffers,Python,Binary,Protocol Buffers,我正在使用协议缓冲区来创建一条非常大的消息 我有一个包含200个子元素的重复元素。然后每个子元素在另一个重复的字段中有将近2000个子元素 问题是,我的代码花了大约4.676秒执行protobuf add方法,将这些子消息添加到重复的字段中 num_calls tottime cumtime 427044 0.734 4.676 add() 我尝试创建一个python列表,然后执行extend方法一次添加每个对象。但性能更差,因为extend正在复制每个子消息: num_c
num_calls tottime cumtime
427044 0.734 4.676 add()
我尝试创建一个python列表,然后执行extend方法一次添加每个对象。但性能更差,因为extend正在复制每个子消息:
num_calls tottime cumtime
X X 3.9 extend()
X X 3.6 _init_ (creating submessage)
X X 0.047 appending to python array
Total: 7.547s
有人知道如何在这里提高绩效吗?重新定义一种方法还是什么?也许用不同的方法
提前谢谢 谢谢你的想法肯顿·瓦尔达 我一直在研究有关使用python协议缓冲区的c支持实现的信息。我不知道有这个选择 我发现了一个关于提高Python性能的不同方法的很好的讨论,我将选择c扩展选项 我希望这些信息能帮助其他人提高绩效
此外,protobuf 3.0.0似乎在这方面有所改进。让我们看一下执行此操作的代码摘录。我可以运行和试验的东西。您使用的是C++支持的实现还是纯python实现?