使用mmap随机访问大型二进制文件-从文件末尾检索信息时变慢

时间:2019-06-13 16:04:35

标签: python memory mmap

我得到了一些数据集,其中有一堆大文件(〜100个),我想从这些文件中高效地提取特定行(包括内存和速度)。

我的代码获取相关文件的列表,代码使用[line 1]打开每个文件,然后使用[line 2]将文件映射到内存,同时,对于每个文件,我都会收到一个索引列表并转到在索引上,我像这样检索相关信息(此示例为10个字节):[line 3-4],最后我用[line 5-6]关闭了句柄。

binaryFile = open(path, "r+b")
binaryFile_mm = mmap.mmap(binaryFile.fileno(), 0)
for INDEX in INDEXES:
    information = binaryFile_mm[(INDEX):(INDEX)+10].decode("utf-8")
binaryFile_mm.close()
binaryFile.close()

此代码并行运行,每个文件具有数千个索引,并连续数小时连续数小时进行操作。

现在有问题-当我将索引限制为较小时,代码运行良好(意思是-当我要求代码从文件开头获取信息时)。但!当我增加索引范围时,一切都会减慢(几乎)停止,并且buff / cache内存已满(我不确定内存问题是否与减速有关)。

所以我的问题是,为什么从文件的开头或结尾检索信息有什么关系?如何克服这一点,以便在不减慢和增加增益的情况下从文件结尾立即访问信息? /缓存内存使用。

PS-一些数字和大小:因此我得到了约100个文件,每个文件的大小约为1GB,当我将索引限制为文件的0%-10%时,它运行良好,但是当我允许索引为在文件停止运行的任何位置。

0 个答案:

没有答案