我目前正在调查Python缓冲区界面,看它是否有助于优化我的项目。我的项目处理大型二进制数据文件,这两个数据文件都占用了不可靠的内存以保留在内存中(当解压缩到Python数据结构时它们可以是多个gigs)并且需要花费太多时间来按需解压缩(20-30秒完全或迭代解压)。相反,文件足够小(数十或数百兆)以二进制形式完全存储在存储器中(或者如果需要,通过存储器映射中的页面),并且结构化使得它们需要最少的解包来从例如下进行。
我一直在阅读有关缓冲的内容,例如在PEP中,但有一些事情我不清楚使用它们以原生形式存储结构:
- 我知道缓冲区有关联的Struct样式格式定义,但是
他们究竟在哪里转换为访问时的Python版本?
Python是否根据格式定义自动执行此操作,或者
缓冲输出器是通过getitem还是其他一些来做的?
- 使用缓冲区导出器存储大型C结构数组可以获得多少性能?例如迭代
整个文件需要与解压缩整个文件相同的时间
使用Struct.unpack文件,或者各种各样的效率更高
优化(例如,如果它只解压缩单个结构
元素,如果你没有访问该结构中的其他人)?
- 在元素访问期间是否可以对奇数数据类型进行自动转换?具体来说,其中一些文件格式是喜欢的
使用奇长整数(例如5个字节长)来避免使用a
固定大小的较大整数类型。这可以通过透明和
有效转换,或者我必须将其转换为固定的
分配实际缓冲区以符合时导出器中的大小
结构定义?
醇>