我得到了一些数据集,其中有一堆大文件(〜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%时,它运行良好,但是当我允许索引为在文件停止运行的任何位置。