【发布时间】:2015-04-10 14:00:10
【问题描述】:
我有一个非常非常大的txt.file(大约20G),我可以使用多进程读取整个文件而不是从第一行到最后一行吗?
例如,我有 4 个进程,然后我先计算文件的行数(假设它有 2000 行)。进程1读取第1~500行,进程2读取501~1000,我想知道是否可能(如果一个进程正在读取,另一个进程可以同时读取吗?)。也许这个问题是关于如何拆分txt文件的。
如果没问题。怎么做? 文件中一个进程的代码是这样的:
file = open(file_path,"r",encoding = 'utf-8')
alllines = file.readlines()
file.close()
for line in alllines:
to do...
我不知道如何将所有行更改为数字。有什么建议吗?提前致谢。
【问题讨论】:
-
您的问题中有很多“可能”。您的问题是什么?你想对文件的内容做什么?
-
为什么要多进程呢?效率?
-
可以这样做,但是磁盘I/O是串行操作;您不能让多个线程/进程并行从磁盘的不同部分读取 - 磁盘读取最终会在文件的不同部分之间来回跳转,具体取决于哪个线程处于活动状态,这通常会使性能比如果你只是在一个线程中完成的。
-
首先:如果您没有 SSD 或 RAID,那么您将不会获得任何速度提升,因为 HDD 无论如何都会串行化并行读取。其次,你不能真正做你想做的事,因为你不知道(在文件中)第 501 行在哪里而不阅读所有前面的行。所以,是的,逐行处理 20GB 需要时间。
-
如果每一行的处理都是计算密集型的,那么多处理可能是一个很好的解决方案,但由于上述原因,多处理读取不会有帮助。鉴于计算密集型处理,您可以让一个线程将文件读入队列,并让工作线程从队列中读取以处理每一行
标签: python multiprocessing mpi4py