Python 更新numpy.memmap';d文件并行,有没有一种方法只能;齐平;一个切片而不是整个文件?

Python 更新numpy.memmap';d文件并行,有没有一种方法只能;齐平;一个切片而不是整个文件?,python,numpy,parallel-processing,mmap,numpy-memmap,Python,Numpy,Parallel Processing,Mmap,Numpy Memmap,我必须做很多讨厌的I/o,我选择在numpy中使用内存映射文件…在经历了很多头痛之后,我意识到当一个进程“刷新”到磁盘时,它通常会覆盖其他进程试图用旧数据写入的内容…我知道,使用mmap包,您可以只将一块数据写入磁盘。我会使用mmap,但因为我的数据是由零和非常小的数字组成的,所以弄清楚它们作为字符串生成了多少字节以及哪个处理器“拥有”了哪个块是一件痛苦的事情 是否有一种方法可以执行以下操作: size = comm.Get_size() rank = comm.Get_rank() f = o

我必须做很多讨厌的I/o,我选择在numpy中使用内存映射文件…在经历了很多头痛之后,我意识到当一个进程“刷新”到磁盘时,它通常会覆盖其他进程试图用旧数据写入的内容…我知道,使用mmap包,您可以只将一块数据写入磁盘。我会使用mmap,但因为我的数据是由零和非常小的数字组成的,所以弄清楚它们作为字符串生成了多少字节以及哪个处理器“拥有”了哪个块是一件痛苦的事情

是否有一种方法可以执行以下操作:

size = comm.Get_size()
rank = comm.Get_rank()
f = open('largedatafile','w').close()
if int(rank) == 0:
    matrix = numpy.zeros(size)
    fp = numpy.memmap('largedatafile',dtype='float32',mode='r+',shape=(size))
    fp[:] = matrix[:]
    fp.flush()


fp = numpy.memmap('largedatafile',dtype='float32',mode='r+',shape=(size))
fp[rank] = numpy.random.randn() #this is a dummy task
fp.flush([rank]) #or fp[rank].flush()

因此,每个处理器都可以同时更新mmap,而无需在新数据上刷新旧的零?

检查它避免使用刷新并实现对memmapSaullo Castro的多进程访问并行读取似乎是memmaps的目的…并行写入并不是那么简单,该解决方案不做任何写入。