我正在尝试从内存缓存(memcached)或网络加载HDF5数据,然后从多个Python进程中查询(只读),而不用单独复制整个数据组。直观地说,我想将图像(就像它出现在磁盘上)映射到多个进程中,然后从Python中查询它。
我发现这很难实现,因此这个问题。指针/更正得到赞赏。
File.get_file_image()
,它似乎可以获取文件图像。我还没有看到如何从内存映像而不是磁盘文件构建新的File / FileNode。ndarray.__new__(buffer=...)
表示它将复制数据,而numpy视图似乎只能从现有的ndarrays而不是原始缓冲区构建。Value
包装器来帮助一点)。如果我直接使用ctypes,我可以毫无问题地阅读我的mmap数据,但是我会丢失所有的结构信息,并从numpy / pandas / pytables中查询它。答案 0 :(得分:1)
mmap +核心驱动程序w / H5py,用于内存中只读访问。我提交了一个针对H5py的补丁,以便在此之前的情况下使用文件映像。不幸的是,它被拒绝了,因为上游不想让用户有能力在脚和安全的缓冲区管理(通过引入的Python缓冲区协议Python 2.7),但这需要改变HDF的方面,我没有得到。尽管如此,如果这对您很重要并且您小心并且能够自己构建pyHDF,请查看补丁/拉取请求here
答案 1 :(得分:1)
我认为情况现在应该更新。
如果需要磁盘文件,Numpy现在有一个标准的专用ndarray子类: numpy.memmap
更新:
在研究了multiprocessing.sharedctypes
(CPython 3.6.2 shared memory block allocation code)的实现之后,我发现它总是创建tmp文件为mmap
ed,所以不是真正的文件 - 少解决方案。
如果只需要基于纯RAM的共享,有人会用multiprocessing.RawArray演示它:
test of shared memory array / numpy integration