当更新numpy.memmap并行文件,有没有办法只“刷新”一个切片而不是整个文件?

2024-05-13 23:23:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我不得不做很多讨厌的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?在


Tags: 数据numpysizeget进程处理器matrix磁盘