在并行更新numpy.memmap文件时,有没有办法只能" flush"切片而不是整个文件?

时间:2016-10-07 22:55:25

标签: python numpy parallel-processing mmap numpy-memmap

我必须做很多令人讨厌的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而不会将旧的零重新刷回新数据吗?

0 个答案:

没有答案