有没有更快的方法从Python中的bytearray复制到mmap片段?

时间:2014-07-30 12:40:20

标签: python optimization bytearray ctypes mmap

我正在为XBMC添加一个插件的代码,它将bytearray中提供的图像复制到mmap对象的切片中。使用Kern的行分析器,我的代码中的瓶颈是当我将bytearray复制到适当位置的mmap对象时。实质上:

length = 1920 * 1080 * 4
mymmap = mmap.mmap(0, length + 11, 'Name', mmap.ACCESS_WRITE)
image = capture.getImage()  # This returns a bytearray that is 4*1920*1080 in size
mymmap[11:(11 + length)] = str(image)  # This is the bottleneck according to the line profiler

我无法更改图像或mmap的数据类型。 XBMC将图像作为bytearray提供,mmap接口由不会更改实现的开发人员设计。然而,它不是用来写入文件的 - 这是他从XBMC和他的C ++应用程序中获取数据的方式。我认识到他可以使用可以更好地处理这个问题的ctypes编写一个接口,但他对进一步的开发不感兴趣。 XBMC中的python实现是2.7。

我看了自己用memmove使用ctypes(以自包含的方式使用python)的可能性,但是无法弄清楚如何将bytearray和mmap slice转换为可以与memmove一起使用的c结构不知道那会更快。有关在这两种数据类型之间移动这些字节的快速方法的建议吗?

1 个答案:

答案 0 :(得分:1)

如果对mmap对象的切片分配是您的瓶颈,我不认为可以采取任何措施来提高代码的性能。内部所有分配都是调用memcpy