一些工程是用C#编写的,但是用到了机器学习。当前很多框架都是基于python的,他们之间有时候涉及到大量的数据交换,要是能进行内存共享就好了。无论C#还是python将需要交换的数据存入内存,其他程序处理好这些数据后再重写入内存,这样不但方便,而且速度也会提高不少。
其实python中就有一个函数这样的函数mmap来实现内存共享。
内存共享是两个不同的进程共享内存的意思:同一块物理内存被映射到两个进程的各自的进程地址空间。这个物理内存已经被规定了大小(大小一定要比实际写入的东东大)以及名称。当需要写入时,找到内存名称,然后写入内存,等需要读取时候, 首先要知道你要读取多大(因为物理内存比你要读取的东东大,全部读取的话会读到一些“空”的东西),然后寻找对应名称的物理块,然后读取,就是这么简单。
假设a是一个int16的数组:
将a写入内存块
import mmap
import contextlib
mmap_file = mmap.mmap(-1, 4*a.size, access = mmap.ACCESS_WRITE, tagname = 'sharemem')
mmap_file.write(a)
当你想读取的时候:
with contextlib.closing(mmap.mmap(-1, 4*np.array(b).size, tagname='sharemem', access=mmap.ACCESS_READ)) as