python mmap_python mmap对象[通俗易懂]

python mmap_python mmap对象[通俗易懂]—-使用内存映射的原因为了随机访问文件的内容,使用mmap将文件映射到内存中是一个高效和优雅的方法。例如,无需打开一个文件并执行大量的seek(),read(),write()调用,只需要简单的映射文件并使用切片操作访问数据即可。内存映射一个文件并不会导致这个文件被读取到内存中。也就是说,文件并没有被复制到内存缓存或数组中。相反,操作系统仅仅为文件内容保留了一段虚拟内存。当访问文件的不同区域时…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

—-使用内存映射的原因

为了随机访问文件的内容,使用mmap将文件映射到内存中是一个高效和优雅的方法。例如,无需打开一个文件并执行大量的seek(),read(),write()调用,只需要简单的映射文件并使用切片操作访问数据即可。

内存映射一个文件并不会导致这个文件被读取到内存中。也就是说,文件并没有被复制到内存缓存或数组中。相反,操作系统仅仅为文件内容保留了一段虚拟内存。当访问文件的不同区域时,这些区域的内容才根据需要被读取并映射到内存区域中。而那些从没被访问到的部分还是留在磁盘上。所有这些过程都是透明的,在幕后完成。

如果多个python解释器内存映射同一个文件,得到的mmap对象能够被用来在解释器直接交换数据。也就是说,所有解释器都能同时读写数据,并且其中一个结婚iqsuozuo的修改会自动呈现在其他解释器中。很明显,这里需要考虑同步的问题。但是这种方法有时候可以用来在关岛或套接字间传递数据。

—-mmap是什么

mmap是一种虚拟内存映射文件的方法,它可以将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对应关系。

mmap 模块提供“内存映射的文件对象”,mmap 对象可以用在使用 plain string 的地方,mmap 对象和 plain string 的区别是:

mmap 对象不提供字符串对象的方法;

mmap 对象是可变的,而 str 对象是不可变的

mmap 对象同时对应于打开的文件,多态于一个Python file 对象

mmap 对象可以切片和索引,也可以为它的切片或索引赋值(因为 mmap 对象是可变的),为 mmap 对象的切片赋值时,赋值语句右值的长度必须和左值切片的长度相同。mmap 对象可以作为进程间通过文件进行 IPC 的一种替换手段。

—-创建 mmap 对象

mmap(filedesc, length, tagname=”) #windows

mmap(filedesc, length, flag=MAP_SHARED, prot=PROT_READ|PROT_WRITE) #Unix

创建并返回一个 mmap 对象,参数 filedesc 通常是由 f.fileno()获得的,这在Python文件系列中已经介绍过。

mmap 创建对象的含义是:将指定 fd 的前 length 字节映射到内存。

Windows中,可以通过参数tagname为一段内存映射指定名称,这样一个文件上面可以同时具有多个 mmap。windows中的内存映射都是可读可写的,同时在进程之间共享。

Unix平台上,参数 flags的可选值包括:

mmap.MAP_PRIVATE:这段内存映射只有本进程可用;

mmap.MAP_SHARED:将内存映射和其他进程共享,所有映射了同一文件的进程,都能够看到其中一个所做的更改;

参数 prot 对应的取值包括:mmap.PROT_READ, mmap.PROT_WRITE 和 mmap.PROT_WRITE | mmap.PROT_READ。最后一者的含义是同时可读可写。

—-mmap 对象的方法

m.close()   关闭 m 对应的文件;

m.find(str, start=0)   从 start 下标开始,在 m 中从左往右寻找子串 str 最早出现的下标;

m.flush([offset, n])   把 m 中从offset开始的n个字节刷到对应的文件中,参数 offset 要么同时指定,要么同时不指定;

m.move(dstoff, srcoff, n)   等于 m[dstoff:dstoff+n] = m[srcoff:srcoff+n],把从 srcoff 开始的 n 个字节复制到从 dstoff 开始的n个字节,可能会覆盖重叠的部分。

m.read(n)   返回一个字符串,从 m 对应的文件中最多读取 n 个字节,将会把 m 对应文件的位置指针向后移动;

m.read_byte()   返回一个1字节长的字符串,从 m 对应的文件中读1个字节,要是已经到了EOF还调用 read_byte(),则抛出异常 ValueError;

m.readline()   返回一个字符串,从 m 对应文件的当前位置到下一个’\n’,当调用 readline() 时文件位于 EOF,则返回空字符串;

m.resize(n)   把 m 的长度改为 n,m 的长度和 m 对应文件的长度是独立的;

m.seek(pos, how=0)   同 file 对象的 seek 操作,改变 m 对应的文件的当前位置;

m.size()   返回 m 对应文件的长度(不是 m 对象的长度len(m));

m.tell()   返回 m 对应文件的当前位置;

m.write(str)   把 str 写到 m 对应文件的当前位置,如果从 m 对应文件的当前位置到 m 结尾剩余的空间不足len(str),则抛出 ValueError;

m.write_byte(byte)   把1个字节(对应一个字符)写到 m 对应文件的当前位置,实际上 m.write_byte(ch) 等于 m.write(ch)。如果 m 对应文件的当前位置在 m 的结尾,也就是 m 对应文件的当前位置到 m 结尾剩余的空间不足1个字节,write() 抛出异常ValueError,而 write_byte() 什么都不做。

参考:

https://www.cnblogs.com/Security-Darren/p/4733387.html

https://docs.python.org/2/library/mmap.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234486.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • (毕业设计资料)基于单片机SPWM逆变器电源系统设计

    (毕业设计资料)基于单片机SPWM逆变器电源系统设计输出:正弦波频率:可调;幅值:可调;逆变原理:51单片机SPWM驱动H桥+后级滤波;调节方式:频率加按键、频率减按键、幅值加按键、幅值减按键;频率调节范围:10hz、20hz、30hz、40hz、50hz、60hz、70hz、80hz、100hz;幅值调节范围:0%,10%,20%,30%,40%,50%,60%,70%,80%,90%,100%;(输出峰值占输入电压百分比)输出最大电流:2A;过流打嗝保护:过流保护值2A,过流时切断,5秒后尝试恢复输出;输入电压范围:

    2022年4月30日
    47
  • react路由嵌套

    react路由嵌套在config.js中添加配置项importTwofrom”../pages/Home/Two”importRecommendfrom”../pages/Recommend/Recemmend”;//导入组件letrouters=[{path:”/home”,//路由地址component:Home,//路由模板routes:[//路由嵌套配置路由嵌套不能使用精准匹配

    2022年4月29日
    43
  • 按键精灵自动点击微信公众号

    按键精灵自动点击微信公众号—————–微信公众号自动化脚本心得———————-通过图片找要操作的位置(加偏移量,屏幕范围可以用变量调整)每扫过一行记得刷新一些变化的坐标信息(记得坐标变化)滚轮可以通过颜色的变化确定是否到底如果直接确定不了要点击的图标(可以通过相对位置,找其附近的参照物)为了防止要找的图片被滑动没,多用静态的图标(以静制动)…

    2022年6月4日
    131
  • 梯度下降与随机梯度下降概念及推导过程「建议收藏」

    梯度下降与随机梯度下降概念及推导过程「建议收藏」接前一章:常用算法一多元线性回归详解2(求解过程)同这一章的梯度下降部分加起来,才是我们要讲的如何求解多元线性回归.如果写在一章中,内容过长,担心有的同学会看不完,所以拆分成两章.[坏笑]上一章中有提到利用解析解求解多元线性回归,虽然看起来很方便,但是在解析解求解的过程中会涉及到矩阵求逆的步骤.随着维度的增多,矩阵求逆的代价会越来越大(时间/空间),而且有…

    2025年10月25日
    2
  • idea 2022.01.21 激活码【2022免费激活】2022.02.26「建议收藏」

    (idea 2022.01.21 激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~2KLKA7BQFO-eyJsaWNlbnNlSWQiOi…

    2022年4月1日
    93
  • SQL行转列、列转行

    SQL行转列、列转行这个主题还是比较常见的,行转列主要适用于对数据作聚合统计,如统计某类目的商品在某个时间区间的销售情况。列转行问题同样也很常见。一、整理测试数据createtablewyc_test( idint(32)notnullauto_increment, namevarchar(80)defaultnull, datedatedefaultn…

    2022年4月4日
    55

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号