python 、mmap 实现内存数据共享

import mmap
mmap_file = None##从内存中读取信息,def read_mmap_info():    
    global mmap_file
    mmap_file.seek(0)    ##把二进制转换为字符串
    info_str=mmap_file.read().translate(None, b‘\x00‘).decode()    print(info_str)##如果内存中没有对应信息,则向内存中写信息以供下次调用使用def get_mmap_info():    global mmap_file    ##第二个参数1024是设定的内存大小,单位:字节。如果内容较多,可以调大一点
    mmap_file = mmap.mmap(-1, 1024, access = mmap.ACCESS_WRITE, tagname = ‘share_mmap‘)    ##读取有效比特数,不包括空比特
    cnt=mmap_file.read_byte()    if cnt==0:        print("Load data to memory")
        mmap_file = mmap.mmap(0, 1024, access = mmap.ACCESS_WRITE, tagname = ‘share_mmap‘)
        mmap_file.write(b"This is the test data")    else :        print("The data is in memory")
        read_mmap_info()##修改内存块中的数据def reset_mmp_info:    global mmap_file
    mmap_file.seek(0)
    mmap_file.write(b‘\x00‘)
    mmap_file.write(b"Load data to memory agine")if __name__=="__main__":
    get_mmap_info()

说明:如果是使用python自带的IDE,请重新打开一次此文件运行测试数据装载到内存后的结果

时间: 2024-11-05 06:12:53

python 、mmap 实现内存数据共享的相关文章

Python如何管理内存?

对于Python来说,内存管理涉及所有包含Python对象和堆. Python内存管理器在内部确保对堆的管理和分配. Python内存管理器具有不同的组件,可处理各种动态存储管理方面,如共享,分段,预分配或缓存. 在最低级别,原始内存分配器确保堆中有足够的空间通过与操作系统的内存管理器交互来存储所有与Python相关的数据.在原始内存分配器之上,几个特定于对象的分配器在同一堆上运行,并实现适合于每种对象类型的特性的不同内存管理策略. 例如,整数对象在堆内的管理方式与字符串,元组或字典不同,因为整

python变量的内存机制

python变量的内存机制 作为一门简单易用的语言,且配备海量的库,python可谓是程序员手中的掌中宝,编程本身就是一种将人类思维转化为计算机思维的技术,如果不需要去追求极致的运行效率同时又不限制于计算机内存空间,python无疑是目前最方便的语言了. 作为一个合格的程序员,自然是要知其然并知其所以然,除了能够应用python来放飞自我之外,同时也要探究python其内部的运行原理,首当其冲的python编程中必须要用到的变量以及背后的运行机制. 注:以下示例在linux平台下编写,使用pyt

python标准库基础之mmap:内存映射文件

#作用:建立内存映射文件而不是直接读取内容文本信息内容:如下(名称是text.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 facil

Python实现共享内存通信方式

创建共享内存python文件: import mmap import contextlib import time with contextlib.closing(mmap.mmap(-1, 100, tagname='SASU', access=mmap.ACCESS_WRITE)) as m: for i in range(1, 10001): m.seek(0) m.write(str(i).encode()) m.flush() time.sleep(1) 读取共享内存python文件:

如何解决python训练数据内存泄露问题?

Python语言 越来越广泛的应用于机器学习/ 深度学习领域,是目前最火的该领域编程语言,各大深度学习框架基本都支持 python 接口. 在TensorFlow 训练模型的过程中,一般数据加载分情景各有不同. 1.  当数据量能直接全部载入内存时,当然最是方便,直接全部载入内存,然后训练即可. 2.  数据无法全部载入内存时,有多种方法.介绍其中 2 种用的多的,其一是边训练边读取(可以用多线程进行优化),其二是随机打乱所有训练数据的索引然后随机选择部分数据进行训练测试. 第2 类情景中,有可

python 对象和内存的关系

首先你输入了一个字符串,这个字符串是有大小的,电脑将其放在内存中,自动给其一个起始指针指向这个字符串的首位置,然后,你将这个字符串赋值给一个变量,这个对象又在内存中开辟出一个空间,这个变量会自动连接这个指向字符串起始位置的指针,然后你又将这个变量赋值给变量2,内存中又开辟出一个空间存放变量2的空间.那么,这个变量2把连接变量1的那个指向字符串起始位置的指针给抢走了,变量1就没有指针可连,如果它很长时间都是孤家寡人的话,它就失去了作用,失去了作用,就会被python中的垃圾清理站给回收. 如果你不

Linux进程间通信--mmap共享内存(一)

共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式.两个不同进程A.B共享内存的意思是,同一块物理内存被映射到进程A.B各自的进程地址空间.进程A可以即时看到进程B对共享内存中数据的更新,反之亦然.由于多个进程共享同一块内存区域,必然需要某种同步机制,互斥锁和信号量都可以. 采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝.对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据[1]:一次从输入

Linux进程间通信--mmap()共享内存(二)

内核怎样保证各个进程寻址到同一个共享内存区域的内存页面 1.page cache及swap cache中页面的区分:一个被访问文件的物理页面都驻留在page cache或swap cache中,一个页面的所有信息由struct page来描述.struct page中有一个域为指针mapping ,它指向一个struct address_space类型结构.page cache或swap cache中的所有页面就是根据address_space结构以及一个偏移量来区分的. 2.文件与addres

Python中的内存管理机制

Python是如何进行内存管理的 python引用了一个内存池(memory pool)机制,即pymalloc机制,用于管理对小块内存的申请和释放 1.介绍 python和其他高级语言一样,会进行自动的内存管理.它使用引用计数机制检测为对象分配的内存是否可以被释放.然后,在Python中内存永远不会返还给操作系统,Python会持有这些内存并在需要时重新使用它们.在很多场景下,这个特性可以减少内存申请和释放所带来的性能损耗:但对于需要长时间运行的Python进程来讲,Python将会占用大量的