Python缓冲区,它们如何工作?

时间:2018-06-15 22:46:27

标签: python python-3.x cpython

我目前正在调查Python缓冲区界面,看它是否有助于优化我的项目。我的项目处理大型二进制数据文件,这两个数据文件都占用了不可靠的内存以保留在内存中(当解压缩到Python数据结构时它们可以是多个gigs)并且需要花费太多时间来按需解压缩(20-30秒完全或迭代解压)。相反,文件足够小(数十或数百兆)以二进制形式完全存储在存储器中(或者如果需要,通过存储器映射中的页面),并且结构化使得它们需要最少的解包来从例如下进行。

我一直在阅读有关缓冲的内容,例如在PEP中,但有一些事情我不清楚使用它们以原生形式存储结构:

  1. 我知道缓冲区有关联的Struct样式格式定义,但是 他们究竟在哪里转换为访问时的Python版本? Python是否根据格式定义自动执行此操作,或者 缓冲输出器是通过getitem还是其他一些来做的?
  2. 使用缓冲区导出器存储大型C结构数组可以获得多少性能?例如迭代 整个文件需要与解压缩整个文件相同的时间 使用Struct.unpack文件,或者各种各样的效率更高 优化(例如,如果它只解压缩单个结构 元素,如果你没有访问该结构中的其他人)?
  3. 在元素访问期间是否可以对奇数数据类型进行自动转换?具体来说,其中一些文件格式是喜欢的 使用奇长整数(例如5个字节长)来避免使用a 固定大小的较大整数类型。这可以通过透明和 有效转换,或者我必须将其转换为固定的 分配实际缓冲区以符合时导出器中的大小 结构定义?

0 个答案:

没有答案