滑动窗口内存映射管理器的纯python实现

smmap2的Python项目详细描述


##动机

当以类似于随机访问的方式从许多可能很大的文件中读取时,使用内存映射通常是最快和最有效的。

尽管内存映射有许多优点,但它们表示的系统资源非常有限,因为每个映射使用一个文件描述符,每个进程的文件描述符数量有限。在32位系统上,一次可以映射的内存量自然局限于理论上的4GB内存,这对于某些应用程序来说可能不够。

##限制

  • 系统资源(文件句柄)可能泄漏!这是因为库作者依赖于确定性的析构函数。
  • 存储器访问按设计为只读。

##概述

[![生成状态](https://travis-ci.org/gitpython-developers/smmap.svg?branch=master)](https://travis-ci.org/gitpython-developers/smmap) [![生成状态](https://ci.appveyor.com/api/projects/status/kuws846av5lvmugo?svg=true&passingText=windows%20OK&failingText=windows%20failed)](https://ci.appveyor.com/project/Byron/smmap) [![覆盖状态](https://coveralls.io/repos/gitpython-developers/smmap/badge.png)](https://coveralls.io/r/gitpython-developers/smmap) [![发布状态](http://www.issuestats.com/github/gitpython-developers/smmap/badge/pr)](http://www.issuestats.com/github/gitpython-developers/smmap) [![发布统计信息](http://www.issuestats.com/github/gitpython-developers/smmap/badge/issue)](http://www.issuestats.com/github/gitpython-developers/smmap

smmap在mmap周围包装了一个接口,并跟踪映射的文件以及使用它的客户机数量。如果系统资源不足,或者达到内存限制,它将自动卸载未使用的映射以允许继续操作。

为了允许在32位系统上处理大文件,它只允许映射文件的一部分。一旦用户读取超出映射区域的内容,smmap将自动映射下一个所需区域,并使用lru算法卸载未使用的区域。

在python 2.5之前的python实现中,该接口还可以处理缺少的offset参数。

尽管库可以最有效地与它的本机接口一起使用,但是提供了一个缓冲区实现,以将这些细节隐藏在一个简单的类似字符串的接口后面。

对于性能关键的64位应用程序,提供了内存映射的简化版本,该版本始终映射整个文件,但仍提供按需卸载未使用映射的好处。

##先决条件

  • python 2.7或3.4+
  • OSX、Windows或Linux

该软件包在前面提到的所有配置上都进行了测试。

##安装smmap

[![文档状态](https://readthedocs.org/projects/smmap/badge/?version=latest)](https://readthedocs.org/projects/smmap/?徽章=最新)

使用[pip](http://www.pip-installer.org/en/latest)程序安装smmap最简单:

`bash $ pip install smmap `

由于该命令将在您各自的python发行版中安装smmap,因此您很可能需要根权限来授权所需的更改。

如果您下载了源文件,则可以通过运行setup.py脚本来安装包:

`bash $ python setup.py install `

建议查看使用指南,以简要介绍不同的数据库实现。

##主页和链接

该项目位于github上的https://github.com/gitpython-developers/smmap

最新的源代码也可以从github克隆:

  • git://github.com/gitpython-developers/smmap.git

要获得支持,请使用git python邮件列表:

可以在github上提交问题:

##许可证信息

smmap根据新的bsd许可证获得许可。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Apache Flink外部Jar   创建和强制转换对象数组时发生java错误   Java,添加数组   具有相同包结构和类的java JAR   java Jenkins未能构建Maven项目   java为什么一个forloop比另一个更快,尽管它们做的“一样”?   servlets在将“/”站点迁移到Java EE包时处理contextpath引用   无法解析java MavReplugin:2.21或其某个依赖项   泛型如何编写比较器来泛化Java中的两种类型的对象?   java Android Emulator未在netbeans上加载   多线程Java使用线程对数组中的数字求和:在同步块中使用新变量作为锁:差异   java如何在JSP/servlet中设置<input>标记的值?