Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python的protocolbuffers add()方法非常慢_Python_Binary_Protocol Buffers - Fatal编程技术网

使用Python的protocolbuffers 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

我正在使用协议缓冲区来创建一条非常大的消息

我有一个包含200个子元素的重复元素。然后每个子元素在另一个重复的字段中有将近2000个子元素

问题是,我的代码花了大约4.676秒执行protobuf add方法,将这些子消息添加到重复的字段中

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实现?