在程序运行过程中,可能遇到需要进程间或不同平台的语言之间进行信息交互,存在硬盘是一种解决方案但是速度太慢。python的mmap库提供了共享内存的实践方案可以完成信息在内存间交互。
简介
共享内存
内存共享是两个不同的进程共享内存的意思:同一块物理内存被映射到两个进程的各自的进程地址空间。这个物理内存已经被规定了大小(大小一定要比实际写入的东东大)以及名称。当需要写入时,找到内存名称,然后写入内存,等需要读取时候, 首先要知道你要读取多大(因为物理内存比你要读取的东东大,全部读取的话会读到一些“空”的东西),然后寻找对应名称的物理块,然后读取,就是这么简单。
mmap
mmap是一种虚拟内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。关于系统中mmap的理论说明可以看百度百科和维基百科说明以及mmap函数介绍,这里的说明是针对在Python下mmap块的使用说明。
- 官网文档:https://docs.python.org/2/library/mmap.html
使用方法
创建:创建并返回一个 mmap 对象
m = mmap.mmap(fileno, length[, flags[, prot[, access[, offset]]]])
- fileno: 文件描述符,可以是file对象的fileno()方法,或者来自os.open(),在调用mmap()之前打开文件,不再需要文件时要关闭。
os.O_RDONLY 以只读的方式打开 Read only
os.O_WRONLY 以只写的方式打开 Write only
os.O_RDWR 以读写的方式打开 Read and write
os.O_APPEND 以追加的方式打开
os.O_CREAT 创建并打开一个新文件
os.O_EXCL os.O_CREAT| os.O_EXCL 如果指定的文件存在,返回错误
os.O_TRUNC 打开一个文件并截断它的长度为零(必须有写权限)
os.O_BINARY 以二进制模式打开文件(不转换)
os.O_NOINHERIT 阻止创建一个共享的文件描述符
os.O_SHORT_LIVED
os.O_TEMPORARY 与O_CREAT一起创建临时文件
os.O_RANDOM 缓存优化,但不限制从磁盘中随机存取
os.O_SEQUENTIAL 缓存优化,但不限制从磁盘中序列存取
os.O_TEXT 以文本的模式打开文件(转换)
-
**length:**要映射文件部分的大小(以字节为单位),这个值为0,则映射整个文件,如果大小大于文件当前大小,则扩展这个文件。
-
flags:MAP_PRIVATE:这段内存映射只有本进程可用;mmap.MAP_SHARED:将内存映射和其他进程共享,所有映射了同一文件的进程,都能够看到其中一个所做的更改;
-
**prot:**mmap.PROT_READ, mmap.PROT_WRITE 和 mmap.PROT_WRITE | mmap.PROT_READ。最后一者的含义是同时可读可写。
-
**access:**在mmap中有可选参数access的值有:
ACCESS_READ:读访问。
ACCESS_WRITE:写访问,默认。
ACCESS_COPY:拷贝访问,不会把更改写入到文件,使用flush把更改写到文件。
对象方法
- m.close()
关闭 m 对应的文件;
- m.find(str, start=0)

本文介绍了Python中的mmap库如何通过内存映射实现不同进程间的高效信息交互,包括内存共享的概念、mmap函数的使用方法以及创建和操作共享内存的示例。重点讲解了如何利用mmap进行文件读写和数据共享,以及其在提高程序性能上的优势。
6383

被折叠的 条评论
为什么被折叠?



