当前位置: 首页 > news >正文

amh wordpress 404关键词优化seo优化排名

amh wordpress 404,关键词优化seo优化排名,光大国际建设公司官网,系统网站内存映射模块读写文件提高IO性能mmap 1.概述 这篇文章介绍下与普通读写文件不同的方式,内存映射读写文件。在什么情况下才会用到内存映射操作文件那,还是要先了解下他。 1.1.内存映射与IO区别 常规操作IO开销 常规的操作文件是经过下面几个环节操作I…

内存映射模块读写文件提高IO性能mmap

1.概述

这篇文章介绍下与普通读写文件不同的方式,内存映射读写文件。在什么情况下才会用到内存映射操作文件那,还是要先了解下他。

1.1.内存映射与IO区别

常规操作IO开销
常规的操作文件是经过下面几个环节操作IO读写文件,操作过程比较复杂耗费时间较长。尤其是操作大文件时需要不断的增加IO操作次数,延迟就会增大。

  • 通过系统调用将控制权转移到内核或核心操作系统代码
  • 与文件所在的物理磁盘交互
  • 将数据复制到用户空间和内核空间之间的不同缓冲区

内存映射开销
避免此开销的一种方法是使用内存映射文件。您可以将内存映射描绘成一个过程,在该过程中,读取和写入操作跳过上述许多层并将请求的数据直接映射到物理内存中。因为对于每次访问它不涉及单独的系统调用,也不会在缓冲池之间复制数据,而是内核和用户程序可以直接访问内存。

内存映射文件 I/O 方法为了速度而牺牲了内存使用量,这通常称为时空权衡。但是,内存映射不必使用比传统方法更多的内存。操作系统非常聪明。它将在请求时延迟加载数据,类似于 Python 生成器的工作方式。

此外,借助虚拟内存,您可以加载大于物理内存的文件。但是,当没有足够的物理内存用于文件时,您不会看到内存映射带来的巨大性能改进,因为操作系统将使用较慢的物理存储介质(如固态磁盘)来模拟它缺少的物理内存。

2.测试数据

所有的例子都将使用文本文件 lorem.txt,在当前目录创建lorem.txt文件,并复制下面的内容到文件。

Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Donec egestas, enim et consectetuer ullamcorper, lectus ligula rutrum leo,
a elementum elit tortor eu quam. Duis tincidunt nisi ut ante. Nulla
facilisi. Sed tristique eros eu libero. Pellentesque vel
arcu. Vivamus purus orci, iaculis ac, suscipit sit amet, pulvinar eu,
lacus. Praesent placerat tortor sed nisl. Nunc blandit diam egestas
dui. Pellentesque habitant morbi tristique senectus et netus et
malesuada fames ac turpis egestas. Aliquam viverra fringilla
leo. Nulla feugiat augue eleifend nulla. Vivamus mauris. Vivamus sed
mauris in nibh placerat egestas. Suspendisse potenti. Mauris
massa. Ut eget velit auctor tortor blandit sollicitudin. Suspendisse
imperdiet justo.

3.内存映射操作文件

3.1.读取内容

使用 mmap() 创建一个内存映射文件对象,mmap是一个类,它的构造器参数如下

  • fileno:是一个文件描述符,要么是来自 file 对象的 fileno() 方法, 要么来自 os.open()。使用者负责在调用 mmap() 之前打开文件,并且在使用结束之后关闭它。
  • length:入 mmap() 的参数是要去映射的文件内容的大小。如果值是 0 ,那么代表映射整个文件。如果这个值超过当前文件,文件将会被扩展
  • tagname=Non
  • access=None:ACCESS_READ 表示只读,ACCESS_WRITE 表示直接写(对内存的操作直接写入文件),或者 ACCESS_COPY 用于写时复制(内存分配不写入文件)
  • offset=None
import mmapwith open('lorem.txt', 'r') as f:with mmap.mmap(f.fileno(), 0,access=mmap.ACCESS_READ) as m:print('First 10 bytes via read :', m.read(10))print('First 10 bytes via slice:', m[:10])print('2nd   10 bytes via read :', m.read(10))

文件指针会追踪切片操作上次读取的位置。这个例子中,第一次读取之后指针向前移动了 10 字节。在切片操作开始之前,文件指针重置到文件开始处,然后又向前移动了 10 字节。切片操作之后,调用 read(10) 将会得到文件 11-20 字节的内容。

First 10 bytes via read : b'Lorem ipsu'
First 10 bytes via slice: b'Lorem ipsu'
2nd   10 bytes via read : b'm dolor si'

3.2.写

为了设置一个内存映射文件去接受更新,要以追加模式 r+ (而不是 w)打开然后再进行映射。然后可以使用任何更新数据的 API有两种方式改变内容,调用write方法和切片方式修改。

1.切片方式修改内容

import mmap
import shutil# 复制示例文件
shutil.copyfile('lorem.txt', 'lorem_copy.txt')word = b'consectetuer'
reversed = word[::-1]
print('Looking for    :', word)
print('Replacing with :', reversed)with open('lorem_copy.txt', 'r+') as f:with mmap.mmap(f.fileno(), 0) as m:print('Before:\n{}'.format(m.readline().rstrip()))m.seek(0)  # rewindloc = m.find(word)# 通过切片方式修改文件内容m[loc:loc + len(word)] = reversedm.flush()m.seek(0)  # rewindprint('After :\n{}'.format(m.readline().rstrip()))f.seek(0)  # rewindprint('File  :\n{}'.format(f.readline().rstrip()))

运行结果,内存和文件中第一行中间部分的 「consectetuer」将被替换。

Looking for    : b'consectetuer'
Replacing with : b'reutetcesnoc'
Before:
b'Lorem ipsum dolor sit amet, consectetuer adipiscing elit.'
After :
b'Lorem ipsum dolor sit amet, reutetcesnoc adipiscing elit.'
File  :
Lorem ipsum dolor sit amet, reutetcesnoc adipiscing elit.

2.write方法修改内容

import mmapdef mmap_io_write(filename, text):with open(filename, mode="w", encoding="utf-8") as file_obj:with mmap.mmap(file_obj.fileno(), length=0, access=mmap.ACCESS_WRITE) as mmap_obj:mmap_obj.write(text)

3.3.复制

使用模式 ACCESS_COPY 访问文件,将不会将更新内容写入到磁盘文件

import mmap
import shutil# 复制示例文件
shutil.copyfile('lorem.txt', 'lorem_copy.txt')word = b'consectetuer'
reversed = word[::-1]with open('lorem_copy.txt', 'r+') as f:with mmap.mmap(f.fileno(), 0,# 复制模式access=mmap.ACCESS_COPY) as m:print('Memory Before:\n{}'.format(m.readline().rstrip()))print('File Before  :\n{}\n'.format(f.readline().rstrip()))m.seek(0)  # rewindloc = m.find(word)# 修改文件内容m[loc:loc + len(word)] = reversedm.seek(0)  # rewindprint('Memory After :\n{}'.format(m.readline().rstrip()))f.seek(0)print('File After   :\n{}'.format(f.readline().rstrip()))

这个例子中将文件句柄和 mmap 句柄分开是必要的,with句柄是f,mmap句柄是m,因为两个对象的内部状态是单独维护的。
运行结果中access=mmap.ACCESS_COPY)复制模式只修改了内存中的文件内容,不会将内容写入到磁盘。

Looking for    : b'consectetuer'
Replacing with : b'reutetcesnoc'
Before:
b'Lorem ipsum dolor sit amet, consectetuer adipiscing elit.'
After :
b'Lorem ipsum dolor sit amet, reutetcesnoc adipiscing elit.'
File  :
Lorem ipsum dolor sit amet, reutetcesnoc adipiscing elit.

3.4.正则表达式

因为一个内存映射文件拥有一个字符串的行为,因此可以使用其他操作字符串的模块(如正则表达式)一起使用。这个例子中将会找到所有以「nulla」开始的句子

import mmap
import repattern = re.compile(rb'(\.\W+)?([^.]?nulla[^.]*?\.)',re.DOTALL | re.IGNORECASE | re.MULTILINE)with open('lorem.txt', 'r') as f:with mmap.mmap(f.fileno(), 0,access=mmap.ACCESS_READ) as m:for match in pattern.findall(m):print(match[1].replace(b'\n', b' '))

运行结果

b'Nulla facilisi.'
b'Nulla feugiat augue eleifend nulla.'
http://www.yayakq.cn/news/23617/

相关文章:

  • 网站文章删除了怎么做404四站合一网站建设公司
  • 重庆网网站建设公司网站源码建站视频
  • 安徽网站建设推荐 晨飞网络北京西路做网站的公司
  • 湖北省建设厅信息网站如何让百度不收录网站
  • 提升网站知名度wordpress英文版登陆
  • 肇庆建设网站wordpress mp4播放器
  • 企网站的互联网建设投资基金管理有限公司网站
  • 网站怎么做登录界面网站建设高校
  • 深圳开发公司网站建设成版年蝴蝶视频app免费
  • 外贸网站谷歌推广长沙网上注册公司流程
  • 系统建站有创意的30个网站
  • 怎么编网站wordpress 國内加速
  • 欧洲购物网站排名各种网站开发语言的优缺点
  • 网络公司经营范围有哪些类型山东网站营销seo电话
  • 网站开发和网络安全六安哪家做网站不错
  • 做网站布为网做房地产一级市场的看什么网站
  • 广州市营销型网站建设广州专业做外贸网站
  • 大足网站建设wordpress媒体库整理
  • 网店托管公司seo如何优化一个网站
  • 岳阳网站建设哪家好企业营销战略
  • 嘉兴手机网站制作wap网站开发作业
  • 做用户名和密码网站页面北京短视频推广
  • 网站添加二级域名建立个人网站多少钱
  • 国内免费工厂网站建设wordpress主题 anew汉化
  • 关闭 百度云加速 后网站打不开了网站关键词如何做优化
  • 网站百度排名优化建设摩托车怎么样
  • 用什么网站做cpa网站404页面编写
  • 个人网站怎么建设成都seo优化推广
  • 免费建设网站入驻影视网络推广方案
  • 济南高端网站设计建设公司变更流程